有一容器Container datas;

删除所有值为1000的元素

对于序列容器(vector、deque、string):最好的办法为调用惯用法erase-remove。

datas.erase(std::remove(datas.begin(), datas.end(), destData), datas.end());

对于list:最好的办法是直接调用成员函数remove()。

datas.remove(destData);

对于关联容器(set、multiset、map、multimap):最好的办法是调用成员函数erase()。

datas.erase(destData);

删除满足特定条件的所有元素,如使BadValue函数为真的元素

bool BadValue(int value);

对于序列容器:最好的办法时使用惯用法erase-remove_if。

datas.erase(std::remove_if(datas.begin(), datas.end(), BadValue), datas.end());

对于list:最好的办法是直接调用成员函数remove_if()。

datas.remove_if(BadValue);

对于序列容器:最为麻烦,有两种方法可供选择。
方法1 这种方法比较麻烦,需要先将未被移除的元素赋值到临时容器,再使用swap交换。

...
Container<int> destDatas;
std::remove_copy_if(datas.begin, datas.end(), std::inserter(destDatas, destDatas.end()), BadValue);
c.swap(destDatas);

方法2 直接循环处理。

for (auto iter = datas.begin(); iter != datas.end(); )
{if (BadValue(*iter) datas.erase(iter++); else ++iter;
}

删除满足特定条件的所有元素(BadValue()),同时调用日志函数Log()

对于序列容器:只能通过遍历实现。

for (auto iter = datas.begin(); iter != datas.end();)
{if (BadValue(*iter) {iter = datas.erase(iter);Log();}else ++iter;
}

对于list:处理方法和序列容器一样。

对于序列容器:依然通过遍历,添加Log()即可。

for (auto iter = datas.begin(); iter != datas.end(); )
{if (BadValue(*iter) {datas.erase(iter++); }else ++iter;
}

需要注意的是,通过for循环遍历,删除满足条件的元素时,
序列容器更新迭代器的方法是: iter = datas.erase(iter); 因为序列容器调用erase()返回的是删除位置后的一下位置;
关联容器更新的方法是:datas.erase(iter++); 因为序列容器的erase()返回值为void,只能iter++的方式进行处理。
不过在C++11中,关联容器的erase()和序列容器一样,都返回了删除位置后的下一位置。这样序列容器和关联容器的erase()就统一了。

09. 慎重选择删除元素的方法相关推荐

  1. 5.慎重选择删除元素的方法

    有一容器Container datas; 删除所有值为1000的元素 对于序列容器(vector.deque.string):最好的办法为调用惯用法erase-remove. // destData为 ...

  2. jQuery中添加元素删除元素的方法

    开发工具与关键技术:VS.jQuery 作者:#33 撰写时间:撰写时间:2019年06月06日 jQuery添加元素的方法和移除元素的方法: 引入jQuery插件:  <script src= ...

  3. Python简单遍历字典及删除元素的方法

    Python简单遍历字典及删除元素的方法 这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...

  4. python字典删除元素_Python简单遍历字典及删除元素的方法

    本文实例讲述了Python简单遍历字典及删除元素的方法.分享给大家供大家参考,具体如下: 这种方式是一定有问题的: d = {'a':1, 'b':2, 'c':3} for key in d: d. ...

  5. 怎么删除python工程_python根据字典的键来删除元素的方法

    python根据字典的键来删除元素的方法: 可以利用pop()方法来进行删除. pop()方法可以删除字典定键key及对应的值,并返回被删除的值. 具体使用方法如:[site.pop('name')] ...

  6. python 字典遍历删除_Python简单遍历字典及删除元素的方法

    本文实例讲述了Python简单遍历字典及删除元素的方法.共享给大家供大家参考,详细如下: 这种方式是一定有问题的: d = {'a':1, 'b':2, 'c':3} for key in d: d. ...

  7. jquery追加html及移除,jQuery 添加元素和删除元素的方法

    添加新的 HTML 内容 我们将学习用于添加新内容的四个 jQuery 方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在 ...

  8. hashmap移除元素_Java HashMap 如何正确遍历并删除元素的方法小结

    (一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap myHa ...

  9. 【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  10. 遍历Linux kernel的链表时删除元素的方法

    内核的链表list_head设计相当巧妙.今天我说一下对list_head链表的遍历时如何删除元素. 链表遍历时,如果删除当前元素,一般都会出错的.在由于语言的各种库中的链表都是如此.list_hea ...

最新文章

  1. 码农书架——图灵三月书讯
  2. 自定义SeekBarPreference控件(老外出品,直接在preferences文件中使用,无需其他代码)...
  3. .NET Pet Shop 4.0案例研究预览篇
  4. 在IDEA下导入Maven项目之后 Dependencies报红线
  5. Fragment 键盘弹出方式设置
  6. macOS查看IP地址的命令
  7. windows服务器迁到_Windows Server 2008 R2 DNS 服务器迁移方法
  8. poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
  9. 洛谷 P2117 小Z的矩阵
  10. php超小免杀大马_2019年最新免杀PHP大马(过D盾,过安全狗)
  11. pe制作linux硬盘的镜像文件_制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox)
  12. matlab谐波分析fft,fft谐波分析_matlab进行fft谐波分析_交流电谐波?
  13. 跑跑卡丁车rush服务器维护,跑跑卡丁车RUSH
  14. notability录音定位_请问如何在iPad上科学地使用good notes和notability?
  15. 德佑地产房产经纪人区域总监访谈:精耕,业精于勤
  16. 机器学习中数据预处理——标准化/归一化方法(scaler)
  17. 自己整理的五个常用的焦点图
  18. 每日一篇,非常齐全的网络时间戳API
  19. 手动清除灰鸽子***
  20. iOS应用安全读书笔记之Safari书签

热门文章

  1. 使用JavaScript调用手机平台上的原生API 1
  2. Drupal开发时如何使用远端图片减轻工作量
  3. Android 通过StickyBroadcast获取电量
  4. python脚本清除linux cron中过期的定时计划
  5. Emmet 简写语法
  6. 20. 远程端口查看
  7. 147. class_exists()
  8. 10. 大型网站核心架构要素
  9. 第1讲 zend1.11介绍
  10. 计算机三级下一跳地址,计算机网络——路由表和通过子网掩码计算转发的目的地址...