关于STL 向量的一个问题
来源:百度知道 编辑:UC知道 时间:2024/06/27 05:58:10
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_