vector和map使用erase删除元素
注意的原因:对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。
错误;
//vector vector <int>::iterator iter; for (iter=vecInt.begin(); iter!=vecInt.end(); iter++) { vecInt.erase(iter); } //map for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter) { mapTest.erase(iter); }
正确写法vector:
vector <int>::iterator iter; //第一种 for (iter=vecInt.begin(); iter!=vecInt.end();) { iter = vecInt.erase(iter); } //第二种 for (iter=vecInt.begin(); iter!=vecInt.end();) { vecInt.erase(iter++); }
正确写法map:
//第一种 for(ITER iter=mapTest.begin();iter!=mapTest.end();) //注意此处不能再写iter++ { mapTest.erase(iter++); } //第二种 for(ITER iter=mapTest.begin();iter!=mapTest.end();) { iter=mapTest.erase(iter); //erase() 成员函数返回下一个元素的迭代器 }