错误的方法:
- for (MAP::iterator it = theMap.begin(); theMap.end()!=it; ++it) {
- if (canDrop(*it)) {
- // 错误:当erase执行以后,it立刻就失效了,在执行到for循环的++it时就会出现未知后果。
- theMap.erase(it);
- }
- }
- for (MAP::iterator it = theMap.begin(); theMap.end()!=it;) {
- if (canDrop(*it)) {
- // 在erase之前,先递增迭代器,此时由于erase尚未被调用,所以递增后的迭代器有效
- // 然后用迭代器的原始值来调用erase,确何删除正确的荐
- theMap.erase(it++);
- } else {
- ++it;
- }
- }