据说如果交换两个容器的值,迭代器不会失效。
所以下面的代码可以正常工作
vector<int> v1;
v1.push_back(1);
vector<int>::iterator i = v1.begin();
vector<int> v2(v1);
v2.swap(v1);
cout<<*i<<endl; //output 1
但是当我转向临时容器时,迭代器失效,程序崩溃。
vector<int> v1;
v1.push_back(1);
vector<int>::iterator i = v1.begin();
vector<int>(v1).swap(v1);
cout<<*i<<endl; //i become invalid and program crashes here
这可能是个愚蠢的问题,但我不知道哪里出了问题。
最佳答案
我相信这是因为迭代器属于您与之交换的容器。当您将它与临时对象交换时,迭代器指向临时对象的成员,然后临时对象被销毁并且迭代器变为无效。
我不确定它是如何工作的,但这是我能想到的 vector 的迭代器在交换后保持有效的唯一方法(只是交换指向数组的内部指针,而不是分配新数组和复制等)。
关于c++ - 迭代器在与临时容器交换后变得无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006718/