<分区>
我知道当回推超出容量时,C++ STL vector 会重新定位两次分配的空间。我的问题是,如果我有一个 vector 的引用,它在推回后是否仍然有效?
例子如下:
void displayVector(vector<int>& p)
{
for(auto i:p)
cout<<i<<" ";
cout<<endl;
cout<<"capacity = "<<p.capacity()<<endl<<endl;
}
int main()
{
vector<int> x(1);
vector<int>& y=x;
cout<<"x"<<endl;
displayVector(x);
cout<<"y"<<endl;
displayVector(y);
for(int i=0;i<100;i++)
x.push_back(10); // re- allocation takes place many times
cout<<"x"<<endl;
displayVector(x);
cout<<"y"<<endl;
displayVector(y);
}
我从上面的程序中得到的结果表明,即使在多次重新分配之后,y
作为对 x
的引用仍然有效。
所以我的问题是:
1) 它会一直发生还是在某些情况下可能会中断?
2) 引用如何在它仍然有效的情况下保持有效,即即使在重新分配之后,在引擎盖下发生了什么以保持引用有效。