使用stl标准容器过程中,遍历容器时总结了两种出现 iterators incompatible的原因:
1.遍历删除容器中某个的元素后继续遍历导致错误
list<int > testlist;
for (auto it = testlist.begin(); it != testlist.end(); ++it)
{
if (5==*it)
{
testlist.erase(it);//erase导致当前it指向不可预知,erase返回的是下一个元素的迭代器
}
}
2.定义了容器的对象后,不能对对象进行memset之类的操作
struct M_stru
{
M_stru()
{
memset(this, 0, sizeof(M_stru));
}
vector<int > testvec;
};
int main()
{
M_stru stru1;
stru1.testvec.push_back(111);
stru1.testvec.push_back(222);
for (auto test : stru1.testvec)//这里的遍历会出错
{
}
return 0;
}