我有一个简短的问题:
vector<int> ints{1,2,3,4};
int &y = ints[0];
// ints.push_back(y);
y = 5;
for (auto &x : ints) {
cout << x << ", ";
}
为什么在发表评论时您会得到评论,5, 2, 3, 4
而在取消评论时却ints.push_back(y);
会得到评论1, 2, 3, 4, 1
。为了更加清楚地说明问题,我将再次写它:您正在获得[-->1<--], 2, 3, 4, 1
,而不是5, 2, 3, 4, 1
甚至5, 2, 3, 4, 5
这种行为使我发疯……内幕发生了什么?
当您推回向量时,如果向量没有分配足够的内存来存储新元素,它将分配一个新的更大的内存块,将这些元素移到上方,并释放旧的内存。如果发生这种情况,则对向量元素的任何引用或指针都将无效。
因此,在回推之后,当您再分配5
给时y
,它是未定义的行为,因为它是y
无效的引用,并且没有理由期望该分配对向量的任何元素产生任何影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句