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对我大喊大叫但看起来不是正确的事情。
答案 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;
}