c++ - 如何将参考向量作为类成员?
问题描述
我有一个包含向量的类。我想要这样,如果原始向量被修改,那么类成员向量也将被修改。即类成员向量是对原始向量的引用:
#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 时输出。
解决方案
在您的代码段中,这两个vector
s 是独立的实例(除了一个被另一个初始化)。有了这个,
class Me {
public:
vector<Entity> vec;
};
/* ... */
me.vec = vec;
您复制vec
into的内容me.vec
以及对其中任何一个的任何修改me.vec
或vec
不影响另一个。你想要的是这样的:
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
使用现有的向量实例初始化实例。
推荐阅读
- r - 找出两个不同长度的向量之间的所有组合
- python - 带有强制关键字的可选参数
- java - 如何在android中录制麦克风和媒体播放器
- linear-programming - 混合整数线性规划中的节俭边界
- android - 单击通知不会仅在 AndroidOS Oreo 中启动预期活动?
- ruby-on-rails - Heroku Ruby On Rails 服务器日志显示“用户”不存在
- r - 使用 ggplot 将变化绘制为值之间的条形图
- excel - 如何将带有我自己的调色板的图库添加到 ContextMenuPly?
- r - 如何将ggrough图表保存为.png
- python - 安装 django-google-address 时出错