问题描述
- 一个简单的C++练习,运行时显示“vector iteration incompatible"。
- array ar = { 0 1 1 2 3 5 8 13 21 55 89 };
vector vec(ar.begin() ar.end());
auto it = vec.begin();
while (it != vec.end())
{
if (*it % 2)
vec.erase(it);
else
it++;
}
for (auto i : vec)
cout << i;
解决方案
你每次执行完vec.erase后都要让it指向新的vec
把 vec.erase(it);
改为 it = vec.erase(it);
解决方案二:
你的答案是正确的。《C++ Primer》》这本书上说v.erase(it)会返回被删除元素下一个元素的迭代器,看来是说错了。谢谢。
解决方案三:
你每次执行完vec.erase后都要让it指向新的vec
把 vec.erase(it);
改为 it = vec.erase(it);
解决方案四:
容器在erase以后,迭代器就会失效,所以iter = vec.erase(iter)就可以啦
解决方案五:
书没错,它确实会返回下一个迭代器,同时原来的迭代器会失效。所以你的方法有问题,因为循环会用老的迭代器,而改法就是自己保存新的迭代器。
时间: 2024-09-30 14:48:34