stl容器set,map,vector之erase用法与返回值详细解析

   2015-08-11 0
核心提示:在使用 list、set 或 map遍历删除某些元素时可以这样使用,如下所示

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

在使用 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;
          }
}

 
标签: stl vector erase
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • java怎么自定义jstl标签库 jstl标签库有哪些标
    这篇“java怎么自定义jstl标签库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java怎么自定义jstl标签库”文章吧。开发环境:Spri
    02-09 javajstl
  • rust与rustlings
    rust与rustlings
    rustlings提供许多小的有关rust基本语法的简单练习,包括rust-book上的一些例子。 rustlings项目:https://github.com/rust-lang/rustlings 里面提供了两个在线IDE:https://repl.it/github/rust-lang/rustlingshttps://gitpod.io/#https://github.com/rust-l
    02-09
  • 如何用MATLAB读stl并显示点云文件
    function [VertexData,FVCD,isBinary]=stl2matlab(stlfile)% STL2MATLAB reads STL-file, ASCII or binary format, into Matlab%% Usage:%% [VertexData, FVCD]=stl2matlab(stlfile)%% Input:%% stlfile - STL-file%% Output:%% VertexData - Cellarray conta
    02-09
  • C++ STL容器与函数谓词示例分析讲解
    目录1.C++ vector向量2.C++ stack 栈3.C++ queue 队列4.优先级队列5.C++ list6.c++ set 集合7.C++ map函数8.C++ multimap容器9.C++ 谓词10.C++内置预定义函数C++ STL(Standard Template Library标准模板库),相当于java的集合模块, STL 有很多的容器。1.C+
  • C++中STL容器的主要使用及含义说明
    目录1.stack栈容器的使用2.vector可变数组的使用3.queue队列的使用4.map的用法5.set集合的用法1.stack栈容器的使用假如栈中存放的是字符串,我们做如下定义:stackstring ss;  //设该变量名为ss其主要用法如下:ss.push(a);//存入栈中元素ass.top();//读取栈
    02-09 C++STL容器
  • C++ STL中的常用遍历算法分享
    C++ STL中的常用遍历算法分享
    目录1.for_each功能描述函数原型2.transform功能描述函数原型1.for_each功能描述实现容器遍历函数原型for_each(itertor beg,iterator end,_func);//遍历算法 遍历容器元素//beg 开始迭代器//end 结束迭代器//_func函数或者函数对象代码#include iostreamusing
    02-09 C++STL遍历
  • JSP中一些JSTL核心标签用法总结
    这篇文章主要介绍了JSP中一些JSTL核心标签用法总结,JSTL标签可以用来方便地操作变量并且还支持自定义功能,需要的朋友可以参考下
  • JSP中使用JSTL按不同条件输出内容的方法
    这篇文章主要介绍了JSP中使用JSTL按不同条件输出内容的方法,实例分析了JSP标签库JSTL的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    10-22 JSPJSTL
  • JSP入门教程之客户端验证、常用输出方式及JSTL
    这篇文章主要介绍了JSP入门教程之客户端验证、常用输出方式及JSTL基本用法,较为详细的分析了JSP实现客户端验证的方法、常用输出方式及JSTL基本用法,并辅以实例说明,需要的朋友可以参考下
  • 深入解析C++ STL中的常用容器
    这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)
    08-16 STL容器C++
点击排行