【STL中的erase()方法 】
来源:互联网 发布:果核源码 编辑:程序博客网 时间:2024/06/05 22:48
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在STL中用earse()方法删除一个元素很简单,基本上也不会出什么错,但是在遍历删除某条件下的元素时就有可能会弄错了。在list、set、map、vector和deque遍历删除某条件元素时通用的一种方法可以这样使用:
std::list< int> List; // 这里也可以是set、map、vector和deque std::list< int>::iterator iter = List.begin(); while( iter != List.end() ) { if( /* 是否删除的条件判断 */ ) { iter = List.erase( iter ); } else iter ++; }
通过erase方法的返回值来获取下一个元素的位置。
对于list、map等节点形式的容器有人会用另一种方式:
while( iter != List.end() ) { if( /* 是否删除的条件判断 */ ) { List.erase( iter++ ); } else iter ++; }
而有些人往往会误用为:
while( iter != List.end() ) { if( /* 是否删除的条件判断 */ ) { List.erase( ++iter ); } else iter ++; }
在这里“++”运算符是被重载过的,与我们平常的理解刚好相反,erase( iter++) 是先获取下一个元素的位置再删除; erase( ++iter) 是删除以后再获取下一个元素的位置。
为了不混淆“++”运算符,建议使用前面的通过erase方法的返回值来获取下一个元素的位置的方式来做遍历删除某些元素,这样所有的STL容器还基本上可以共用,记起来也方便呢,呵...
- 【STL中的erase()方法 】
- STL中的erase()方法遍历删除
- STL vector中的erase方法(26)
- 理解stl中的erase
- 善用STL中的find方法,慎用vector的erase
- 善用STL中的find方法,慎用vector的erase
- STL中的unique和erase
- STL中的remove与erase
- 关于STL中的erase操作
- stl.list正确erase方法
- C++中的erase方法
- STL中的erase函数的问题
- 谨慎使用STL中的erase操作!
- 正确运用stl map的erase方法
- 正确运用stl map的erase方法
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- 直接调用类成员函数地址
- Eclipse初心者杂编(下)
- 成员函数指针与高性能的C++委托
- 中国真的没有软件生长的土壤吗?
- c++成员函数指针揭秘
- 【STL中的erase()方法 】
- 线程的交互
- POJ 2676 Sudoku dfs
- poj1503Integer Inquiry
- 《MacOSX及iOS应用程序开发工具集》(Apple Xcode)v4.0.2 and iOS SDK v4.3[光盘镜像]
- __declspec(dllimport) 对【函数调用】编译结果的影响
- 使用动态代理进行GZIP数据压缩过滤
- SQL中各种日期的算法
- 使用包装模式进行GZIP数据压缩过滤