个人总结,如有错误,请提出,以免误人子弟
1.Vector
vector.earse();//这个会返回删除后的迭代器地址,所以必须要把返回值赋值给迭代器.
Vector<int> vec;//声明
vector<int> vec;
int iNumber = 0;
for (auto itor = vec.cbegin(); itor != vec.cend();)//不要把itor++写在这。auto是C++11的新特性。另外还有C式的遍历方法和.begin()与.cbegin()的不同。不在赘述
{
if (*itor == iNumber)
{
itor = vec.erase(itor);//重要,与map,set等不同。注意
}
else
{
itor++;
}
}
2.map
map<int, int> mapInt;
for (auto itor = mapInt.cbegin(); itor != mapInt.cend;)
{
if (itor->second == 0 )
{
mapInt.erase(itor++);//因为关联容器的erase()方法不会返回一个迭代器的变量。并且itor重写了操作符++方法,会返回一个itor的一个临时变量的旧值,itor本身自增。
}
else
{
itor++;
}
}
贴出部分STL源码
// postfix form: fetch and increment
map<int, int>::iterator operator++(int)//通过一个多余的int参数与prefix++区分
{
map<int, int>::iterator tmp = *this; // fetch
increment(); // increment,map内部由红黑树实现,此函数负责指向下一个有序元素的iterator
return tmp; // return what was
}