c ++ vector operator []参考

时间:2014-01-14 06:56:17

标签: c++ vector

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)。 vector的[]运算符返回一个引用,因为我在引用中添加了5,它不应该影响hash [-1]吗?或者正在复制最后一个推送语句是如何工作的?

2 个答案:

答案 0 :(得分:3)

它返回一个引用,然后使用

复制该引用
vector<int> ref = hash[-1];

你的意思是

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

答案 1 :(得分:2)

使用:

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

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

您真正想要的是使用参考:

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