STL——遍历 删除 set 元素
==================================声明==================================
本文版权归作者所有。
本文原创,转载必须在正文中显要地注明作者和出处,并保证文章(包括本声明)的完整性。
未经作者授权请勿修改(包括本声明),保留法律追究的权利。
未经作者授权请勿用于学术性引用。
未经作者授权请勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善,为保证内容正确,建议移步原文处阅读。
本文链接:http://www.cnblogs.com/wlsandwho/p/4468023.html
=======================================================================
STL是个好东西,在客户端上用一用没什么问题。
在使用multimap时,伴随一个set来统计multimap中key的种类。真是省心省力。
然而,时间换空间、空间换时间。伴随set会带来开销。
世间安得双全法?那必定是晦涩难懂的,不能在普罗大众间流传。
=======================================================================
以前一直没怎么注意遍历删除set。当我随手写了个小代码后,我想知道人类是怎么做的。
于是搜一搜。
不知为何,网上真是转载文章一大抄,这也罢了,可为何STL遍历删除的例子都要列上错误做法?
=======================================================================
set的erase并不返回iterator,所以在遍历删除的时候,要使用
void erase (iterator position);
函数。
一个不错的小网站http://www.cplusplus.com/reference/
=======================================================================
贴上我的纯手工小代码。
1 #include <iostream>
2 #include <set>
3
4 using namespace std;
5
6 int main()
7 {
8 set<int> setIntTest;
9 set<int>::iterator itsetIntTest;
10
11 setIntTest.insert(1);
12 setIntTest.insert(2);
13 setIntTest.insert(3);
14 setIntTest.insert(4);
15 setIntTest.insert(5);
16 setIntTest.insert(6);
17 setIntTest.insert(7);
18
19 wcout<<L"Before:"<<endl;
20 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();itsetIntTest++)
21 {
22 wcout<<*itsetIntTest<<endl;
23 }
24
25 //////////////////////////////////////////////////////////////////////////
26 wcout<<L"Remove those can not be divided by 3:"<<endl;
27 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();)
28 {
29 if ((*itsetIntTest)%3!=0)
30 {
31 wcout<<L"Remove\t"<<*itsetIntTest<<endl;
32
33 setIntTest.erase(itsetIntTest++);//必然是擦除后再移动迭代器,所以后++
34 }
35 else
36 {
37 itsetIntTest++;//这个就无所谓前后了,没有涉及增删操作。
38 }
39 }
40
41 //////////////////////////////////////////////////////////////////////////
42 wcout<<L"After:"<<endl;
43 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();itsetIntTest++)
44 {
45 wcout<<*itsetIntTest<<endl;
46 }
47
48 return 0;
49 }
STL——遍历 删除 set 元素的更多相关文章
- java集合遍历删除指定元素异常分析总结
在使用集合的过程中,我们经常会有遍历集合元素,删除指定的元素的需求,而对于这种需求我们往往使用会犯些小错误,导致程序抛异常或者与预期结果不对,本人很早之前就遇到过这个坑,当时没注意总结,结果前段时间又 ...
- set循环遍历删除特定元素
使用Iterator迭代器 public class Demo { public static void main(String[] args) { Set<Object> obj = n ...
- [STL] 遍历删除两个vector中交集
#include <vector> #include <string> #include <algorithm> using namespace std; int ...
- vector list map 遍历删除指定元素
#include <stdio.h> #include <stdint.h> #include <vector> #include <list> #in ...
- STL中用erase()方法遍历删除元素 .xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- stl 自定义排序与删除重复元素
转: STL—vector删除重复元素 STL提供了很多实用的算法,这里主要讲解sort和unique算法. 删除重复元素,首先将vector排序. sort( vecSrc.begin(), vec ...
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...
- 如何python循环中删除字典元素
//下面这行就是在循环中遍历删除字典元素的方法! for i in list(dictheme2.keys()): if dictheme2[i]<self.countFortheme: dic ...
随机推荐
- 第 24 章 CSS3 变形效果[下]
学习要点: 1.3D 变形简介 2.transform-style 3.perspective 4.3D 变形属性 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 的变形效果,主要接着上节课 ...
- oracle/MySQL 中的decode的使用
MySQL decode()的等同实现 在Oracle中使用decode方法可以轻松实现代码和值之间的转换,但是在MySQL中该如何实现类似功能呢? MySQL中没有直接的方法可以使用 ...
- PHP Redis 全部操作方法
Classes and methods Usage Class Redis Class RedisException Predefined constants Class Redis Descript ...
- 使用MD5WithRSA来签名和验签(.NET)
/// <summary> /// 数字签名并返回BASE64编码的字符串 /// </summary> /// <param name="contentFor ...
- (3)JSTL的fn方法库
fn:functions,fn之所以称之为方法库,是因为fn使用不像core,fmt标签那样遵循<prefix:tagName>的格式,而是遵循fn:methodName()的格式 < ...
- 浅谈spring security 403机制
403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一.无权限访问 <security:http security="none" pattern ...
- 关于HTML面试题汇总之H5
一.H5有哪些新特性,移除了哪些元素?如何处理h5新标签的浏览器兼容性问题,如何区分html和html5 1. html5不在是SGL(通用标记语言)的一个子集,而包含了:图像.位置.存储.多任务等功 ...
- Permit.js – 用于构建多状态原型的 jQuery 插件
Permit.js 是一个 jQuery 插件,用于构建交互的,多态的网站原型和应用程序原型.也许你的网站有的功能仅适用于登录的成员,只有管理员才能使用或者你的应用程序会根据线上或离线有不同的功能,这 ...
- NativeScript - JS 构建跨平台的原生 APP
使用 NativeScript,你可以用现有的 JavaScript 和 CSS 技术来编写 iOS.Android 和 Windows Phone 原生移动应用程序.由原生平台的呈现引擎呈现界面而不 ...
- 8款适合乐队、歌手和音乐家免费 WordPress 主题
这篇文章与大家分享8款适合乐队.歌手和音乐家免费 WordPress WordPress 音乐网站主题.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许 ...