【STL中的erase()方法 】
2011-09-08 01:22
106 查看
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在STL中用earse()方法删除一个元素很简单,基本上也不会出什么错,但是在遍历删除某条件下的元素时就有可能会弄错了。在list、set、map、vector和deque遍历删除某条件元素时通用的一种方法可以这样使用:
通过erase方法的返回值来获取下一个元素的位置。
对于list、map等节点形式的容器有人会用另一种方式:
而有些人往往会误用为:
在这里“++”运算符是被重载过的,与我们平常的理解刚好相反,erase( iter++) 是先获取下一个元素的位置再删除; erase( ++iter) 是删除以后再获取下一个元素的位置。
为了不混淆“++”运算符,建议使用前面的通过erase方法的返回值来获取下一个元素的位置的方式来做遍历删除某些元素,这样所有的STL容器还基本上可以共用,记起来也方便呢,呵...
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中vector删除方法erase的原理
- STL中用erase()方法遍历删除元素
- STL中用ERASE()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中list的erase()方法
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL容器如何正确调用自己的erase方法
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用ERASE()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中用erase()方法遍历删除元素
- STL中迭代器失效——用erase()方法遍历删除元素
- STL中正确使用ERASE()方法遍历删除元素