c++ - 包含引用的对象 vector

标签 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 
};

如何创建 vector allEdges ? 我知道我必须创建一个默认构造函数和 vector 支持的赋值运算符,但我已经知道这会因为不存在默认构造函数而产生问题。

我已经创建了一个默认构造函数,只是为了应付 std::vector 对我大喊大叫,但似乎不是正确的做法。

最佳答案

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

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

#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

关于c++ - 包含引用的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684733/

相关文章:

c++ - std::spanstream 通常如何在 C++ 中使用?

c++ - 电子邮件 header 显示,dkim=hardfail(测试模式)和 dkim=permerror(错误信号)

c++ - 模运算符给出带有前导零的不同结果

c++ - 使用指针简化我的 C++ 代码

java传递对函数的引用

c# - 无法添加对 dll 的引用。该组件是自动引用的 C#

c++ - 位运算 (C++)

c++ - 我应该使用元组 vector 还是数组 vector ?

c++ - <vector> 在不同位置读/写是线程安全的吗?

MATLAB - 从向量中删除前导零和尾随零