【问题标题】:How to connect two elements of a vector?如何连接向量的两个元素?
【发布时间】:2016-05-04 02:47:20
【问题描述】:

我想知道 C++ 中是否有一种方法可以连接向量的两个元素,例如 std::vector ,这样如果一个元素发生更改,另一个元素会自动更改。如果没有,还有其他方法吗?

谢谢。

【问题讨论】:

  • 您可以将std::shared_ptr 存储在向量中。当您标记您的问题时,您是否已经尝试过并且它对您不起作用?
  • @πάνταῥεῖ 感谢您的回答。我对 C++ 比较陌生,我应该使用 std::vector<:shared_ptr> 吗?
  • 你应该使用std::vector&lt;std::shared_ptr&lt;ElemType&gt;&gt;是的。
  • std::shared_ptr&lt;std::vector&lt;ElemType&gt;&gt;
  • 或者,如果你小心点,你可以存储简单的指针。

标签: c++ c++11 shared-ptr stdvector


【解决方案1】:

假设您有两个向量,其中包含相同类型的 Object 实例。然后使用shared_ptr&lt;Object&gt;可以引用同一个对象:

vector<shared_ptr<Object>> v1;
vector<shared_ptr<Object>> v2;

for(int i=0;i<3;i++) {
     v1.push_back(shared_ptr<Object>(new Object()));
     v2.push_back(v1[i]);
}

现在如果你编辑一个向量的对象的属性,相应的对象也会被更新:

v1[0]->value = 12;
cout << v2[0]->value << endl;  // print 12

【讨论】:

  • 非常感谢您的回答。我明白它背后的想法。但是,它与我需要的有点不同。我只有一个包含双精度的向量,假设它的大小为 1000 个元素。例如,我想连接;前 10 个元素到后 10 个元素分别。所以当我改变前 10 个元素时,后 10 个元素也会改变。
  • @πάνταῥεῖ 再次感谢。
  • 你也可以使用 emplace_back 和 make_shared v1.emplace_back(make_shared&lt;Object&gt;());
【解决方案2】:
class A {
  ... Your class definition

  public:
      int x;
};
typedef std::shared_ptr<A>     APtr;
typedef std::vector<APtr>      AVect;

AVect v;
APtr ptr_a = std::make_shared<A>(); //using std::make_shared<> is better than naked new allocations in code.
v.push_back(ptr_a);
v.push_back(ptr_a);

v[0]->x = 3; //modifies v[1] as well

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多