stl容器set,map,vector之erase用法与返回值详细解析_C语言教程-查字典教程网
stl容器set,map,vector之erase用法与返回值详细解析
stl容器set,map,vector之erase用法与返回值详细解析
发布时间:2016-12-28 来源:查字典编辑
摘要:总结本人在工作中经验教训。在使用list、set或map遍历删除某些元素时可以这样使用:正确使用方法1复制代码代码如下:std::listL...

总结本人在工作中经验教训。

在使用 list、set 或 map遍历删除某些元素时可以这样使用:

正确使用方法1

复制代码 代码如下:

std::list< int> List;

std::list< int>::iterator itList;

for( itList = List.begin(); itList != List.end(); )

{

if( WillDelete( *itList) )

{

itList = List.erase( itList);

}

else

itList++;

}

正确使用方法2

复制代码 代码如下:

std::list< int> List;

std::list< int>::iterator itList;

for( itList = List.begin(); itList != List.end(); )

{

if( WillDelete( *itList) )

{

List.erase(itList++);

}

else

itList++;

}

正确使用方法3

复制代码 代码如下:

std::list< int> List;

std::list< int>::iterator it, next;

for( it = List.begin(), next = it, next ++; it != List.end(); it = next, ++next)

{

if( WillDelete( *it) )

{

List.erase(it);

}

}

注:方法三更为巧妙,但需注意方法三是用前需要判断容器是否为空,否则迭代器会出问题。

我测试得出,set.erase 不返回迭代器,list返回。

vector 删除操作

复制代码 代码如下:

std::vector <PACK_PRINT>::iterator It ;

for(It=printItems.begin();It!=printItems.end();)

{

//我是说这里怎么判断printItems printItems 里PACK_PRINT.bh =0

if( It.bh ==0) //是这样吗?

{//删除

It=printItems.erase(It);

}

else

{//不删除

++It;

}

}

复制代码 代码如下:

std::vector <PACK_PRINT> printItems;

int i = 0;

while(i < printItems.size())

{

if(printItems[i].bh == 0) //这里比如我想把 printItems 时PACK_PRINT.bh =0 的删除如何写哟。另外这样删除有错吗?

{//删除

printItems.erase(printItems.begin() + i);

}

else

{//不删除

++i;

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类