关于STL 向量的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:58:10
typedef vector<int> IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中所有的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
if( 2 == *itor ) array.erase( itor );
}

程序的目的是删除数组中所有的2,但是实际上并不能完全删除,为什么

for( IntArray::iterator itor=array.begin(); itor!=array.end(); itor++ )
{
if( 2 == *itor )

array.erase( itor );
itor --;//删除一个元素后,指针要往前退一个位置
}
}

或者
for( IntArray::iterator itor=array.begin(); itor!=array.end(); )
{
if( 2 == *itor )

array.erase( itor );//删除元素的时候指针不移位。
}else
itor++;
}

当然不能这么删除,一旦发生了插入或者删除等动作的时候,迭代器会失效。
这么删除:
array.erase( remove( array.begin(),array.end(),2),array.end());
包含头文件#include <algorithm>

for( IntArray::iterator itor=array.begin(); itor!=array.end(); )
{
if( 2 == *itor )

array.erase( itor );//删除元素的时候指针不移位。
}else
itor++;
不对吧 如 回答者: _鈊_烦_薏乱 - 一派掌门 十二级 5-19 21:55 所说 插入或删除后 iterator会失效 不只是指针移位的问题 我认为不如新构建一个vector复制元素过去更简单
vector<int> newArray; // 我不喜欢你的声明方式
for(int i=0;i<array.size();i++){ // int类型虽然不规范 但没错
if(array[i]!=2) newArray.push_