首页 > 解决方案 > 如何将参考向量作为类成员?

问题描述

我有一个包含向量的类。我想要这样,如果原始向量被修改,那么类成员向量也将被修改。即类成员向量是对原始向量的引用:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Entity {
    public:
    int x;
    Entity() {}
    Entity(int y) : x(y) {}
};

class Me {
    public:
    vector<Entity> vec;
};

Me me;

int main()
{
  Entity e1(1);
  Entity e2(2);
  vector<Entity> vec;
  vec.push_back(e1);
  vec.push_back(e2);
  me.vec = vec;
  
  me.vec[0].x = 5;
  
  cout << vec[0].x << endl;
  return 0;
}

1当我希望它输出 5 时输出。

标签: c++

解决方案


在您的代码段中,这两个vectors 是独立的实例(除了一个被另一个初始化)。有了这个,

class Me {
    public:
    vector<Entity> vec;
};

/* ... */

me.vec = vec;

您复制vecinto的内容me.vec以及对其中任何一个的任何修改me.vecvec不影响另一个。你想要的是这样的:

class Me {
    public:
    vector<Entity> *vec; // now a pointer to a vector
};

/* ... */

me.vec = &vec; // initialize the pointer with the address of vec

现在,对 的任何更改都vec将通过me.vec. 请注意,这附带了处理指针的必要性 - 它可以是nullptr,在这种情况下,您不能取消引用它。它可以更改它指向的位置,这很容易出错。作为替代方案,请考虑将对向量的引用存储在Me. 引用没有空状态,只能绑定一次。另一方面,您必须Me使用现有的向量实例初始化实例。


推荐阅读