C++开发中使用vector时非常方便的,但是也是需要非常小心的,最近在使用容器删除某个元素的时候,测试结果出现了异常
/* vector erase test*/ int testVector() { vector<int> intVec; /* init vector */ for(int i = 0; i < 10; ++i) { intVec.push_back(i); } /* erase element */ for(auto i = intVec.begin(); i != intVec.end(); ++i) { if (*i % 2) { intVec.erase(i); } } }
大致意思是使用迭代器遍历vector,删除其中的奇数元素,测试结果出现异常。
因为使用erase会破坏迭代器
应该改为如下循环
/* vector erase test*/ int testVector() { vector<int> intVec; /* init vector */ for(int i = 0; i < 10; ++i) { intVec.push_back(i); } /* erase element */ for(auto i = intVec.begin(); i != intVec.end(); /*do nothing*/) { if (*i % 2) { i = intVec.erase(i); } else { ++i; } } }