包含引用的对象的向量

时间:2014-07-10 19:28:14

标签: c++ vector reference

Edge 

{
   Vertex& v1;
   Vertex& v2;
   float cost;
public :
   Edge(Vertex& v_1, Vertex& v_2) :
      v1(v_1), v2(v_2)
   {
   }
   // other getter and setter functions 
};

如何创建向量allEdges? 我知道我将不得不创建一个由向量​​支持的默认构造函数和赋值运算符,但是我已经可以看到这会因为不存在默认构造函数而产生问题。

我已经创建了一个默认构造函数,只是为了让std :: vector对我大喊大叫但看起来不是正确的事情。

1 个答案:

答案 0 :(得分:2)

使用引用作为成员变量是非常有限的,因为它们必须在构造函数的初始化列表中初始化。

但是,拥有一个对象矢量,而这些对象又可以作为成员变量引用,这是完全允许的,如下例所示:

#include <vector>
#include <iostream>

struct Vertex { 
  std::size_t id;
  Vertex(std::size_t const _id) : id(_id) {}
};

class Edge {
   Vertex& v1;
   Vertex& v2;
   double  cost;
public :
   Edge(Vertex& v_1, Vertex& v_2, double const _c) : v1(v_1), v2(v_2), cost(_c) {}
   Vertex& getv1() const { return v1; }
   Vertex& getv2() const { return v2; }
};

int main() {
    Vertex v1(1), v2(2);
    std::vector<Edge> alledges;
    alledges.push_back(Edge(v1, v2, 1.0));
    for(auto i : alledges) std::cout << i.getv1().id << "->" << i.getv2().id << std::endl;

    return 0;
}

LIVE DEMO