在遍历list容器时报错,这里其实是迭代器越界错误。我目前这种情况是删除最后一个list元素会报错,删除其他元素结果错误。
#include <iostream>
#include<List>
using namespace std;
int main()
{
list<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
for (list<int>::iterator iter = nums.begin(); iter != nums.end(); iter++) {
cout << *iter << " "; //正常遍历list
}
cout << endl;
for (list<int>::iterator iter = nums.begin(); iter != nums.end(); iter++) {
if (*iter == 3) { //删除最后一个元素报错
iter=nums.erase(iter); //这里返回的iter已经指向下一个iter(就是指向了nums.end),在下次循环开始iter++后越界报错
continue;
}
cout << *iter << " ";
}
}
正确写法:
#include <iostream>
#include<List>
using namespace std;
int main()
{
list<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
for (list<int>::iterator iter = nums.begin(); iter != nums.end(); iter++) {
cout << *iter << " "; //正常遍历list
}
cout << endl;
for (list<int>::iterator iter = nums.begin(); iter != nums.end();) {
if (*iter == 3) {
iter=nums.erase(iter);
continue; //这里跳过后iter已经指向下一个,所以iter不能继续++
}
cout << *iter << " ";
iter++; //在这里iter++,则跳过的时候不会++
}
}