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