C++ 向量运算符 [] 参考

c++ vector operator[] reference

本文关键字:参考 运算符 向量 C++      更新时间:2023-10-16
vector<int> vec;
vec.reserve(10);
map<int, vector<int> >hash;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
hash[-1] = vec;
vector<int> ref = hash[-1];
ref.push_back(5);
cout <<hash[-1].back() <<endl;  // prints 4
hash[-1].push_back(6);
cout <<hash[-1].back() <<endl;  // prints 6

我不确定,为什么在上面的代码中,hash[-1].back() 不打印 5(输出为 4)。[] 向量的运算符返回一个引用,由于我在引用中添加了 5,它不应该影响哈希 [-1] 吗?还是正在制作副本,最后一个推送语句如何工作?

它返回一个引用,然后你用它复制它

vector<int> ref = hash[-1];

你的意思是

vector<int>& ref = hash[-1];

与:

vector<int> ref = hash[-1];

您正在创建一个名为 ref 的新vector<int>,该使用复制构造函数初始化以hash[-1]

你真正想要的是使用引用:

vector<int>& ref = hash[-1];