1
我知道C++ STL向量在推回超过容量时重新分配了两次分配的空间。我的问题是,如果我有一个向量的引用,它会在推回后保持有效吗?推回后引用矢量重定位吗?如果是,如何?
一个例子如下:
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)如果引用在它仍然有效的情况下仍然有效,即在重新分配后仍然保持引用有效。
对矢量的引用与它所保存的数据不同。所以完全没问题。 –
发生在对象引用上的任何事情都发生在它引用的对象上。 – juanchopanza