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]吗?或者正在复制最后一个推送语句是如何工作的?
答案 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];