1 删除std::map元素
map<int, int> intMap;
map<int, int>::iterator iter;
for(iter = intMap.begin(); iter != intMap.end(); iter++)
{
if(condition)
{
intMap.erase(iter--);
}
}
我们不能直接用intMap.erase(iter)来删除当前元素, 因为iter之后还要用来iter++, 但iterator删除后是不能再使用的,所以我们用iter--使iter指向前一个元素, 但返回当前元素让map删除。这个下一循环时iter++刚好指向我们需要的下一个元素。
2 STL容器的迭代器比较尽量使用 "!=", 而不是 "<"
虽然对于vector而言, "!=" 与 "<" 都能使用
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(2);
vector<int>::const_iterator citer1;
for(citer1 = vecInt.begin(); citer1 < vecInt.end(); citer1++)
//或citer1 != vecInt.end();
{
cout<<*citer1<<endl;
}
但是容器list,map等不支持"<"比较运算符(iterator类似于指针, 像vector这样连续存放时才能支持"<").
所以为了一致性,stl的容器最好全部使用 "!=" 比较