对于vector:
vector<int>::iterator itVec = vectInt.begin();
// 删除所有值为1022的元素
for ( ; itVec != vectInt.end(); )
{
// 删除
if (*itVec == 1022)
itVec = vectInt.erase(itVect); //erase返回指向被删元素之后的那个元素的迭代器
else
++itVec;
}
对于list
ist<int>::iterator itList = listInt.begin();
// 删除所有值为1022的元素
for ( ; itList != listInt.end(); )
{
// 删除
if (*itList == 1022)
listInt.erase(itList++); //list内部链表实现
else
++itList ;
}
//vector不能用上面那种方法是因为vector内部是一块连续的内存,而list则是链表。
关联式容器:
关联式容器循环删除
for (iter = map.begin(); iter != map.end(); )
{
if (shouldDelete(*iter))
map.erase(iter++);
else
++iter;
}
因为关联式容器的erase并不返回下一个元素的迭代器,因此不能用iter = map.erase(iter)这样的表达式(有些版本的STL实现又可以这样写,我建议还是使用 map.erase(iter++)保证移植性)。
关联容器同样也可以用remove等来删除元素。