64,662
社区成员
发帖
与我相关
我的任务
分享
int main()
{
vector<int> ivec(3,1);
int &i = ivec[2];
vector<int> ivec2(3,2);
ivec.swap(ivec2);
cout << i << endl;
}
笔误修正:
ivec.reserve(10); //这条语句会导致内存的重新分配
给楼主的代码添点东西,看了后自然明白引用为何失效!
int main()
{
vector <int> ivec(3,1);
ivec.reserve(10); //这条语句不会导致内存的重新分配
vector <int> ivec2(3,2);
ivec.swap(ivec2);
int &i = ivec[2];
cout<<&i<<endl;
cout<<(void*)&ivec[2]<<endl; //此时引用还是和ivec[2]的内存地址一致
ivec.push_back(2); // 有内存的分配动作,引用失效
i = 5; //i的地址已经失效了,导致无意义的修改,i引用的地址已经被容器delete啦
cout << (void*)&ivec[2] << endl; //这里能看到地址已经跟前面的ivec[2]不一致了
cout<<ivec[2]<<endl;
}
int main()
{
vector<int> ivec(3,1);
ivec.reserve(10);
int &i = ivec[2];
vector<int> ivec2(3,2);
ivec.swap(ivec2);
ivec.push_back(2);
i = 5;
cout << ivec[2] << endl;
}