[C++] STL迭代器失效
2015-03-30 15:40
591 查看
STL容器特征总结与迭代器失效 /article/1871759.html
C++迭代器失效问题__map/set等关联容器如何删除元素__vector/list/deque等序列容器如何删除元素__迭代器如何使用 http://blog.163.com/xychenbaihu%40yeah/blog/static/1322296552010824114547940/
1. 连续存储空间(vector,deque,stack)
插入元素:空间满了的时候,就会失效。
删除元素:删除元素可能导致整体移动,会失效。
2. 链接结构(list,map,set)
插入元素:链接结构插入是不会导致失效的。
删除元素:可能导致结构重新构造,比如红黑树,会失效。
关于删除在说一下:一般都会失效,尽量用erase,序列式容器和关联式容器在erase的返回值上有区别:
序列性容器::(vector和list和deque)
erase迭代器不仅使所指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器。
所以正确方法为::
for( iter = c.begin(); iter != c.end(); )
iter = c.erase(iter);
关联性容器::(map和set比较常用)
erase迭代器只是被删元素的迭代器失效,但是返回值为void,所以要采用erase(iter++)的方式删除迭代器,
所以正确方法为::
for( iter = c.begin(); iter != c.end(); )
c.erase(iter++);
Tips:
其实对于list两种方式都可以正常工
相关文章推荐
- STL迭代器失效的情况
- STL迭代器失效问题
- 关于STL迭代器失效的思考.
- STL迭代器及迭代器失效问题
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL迭代器失效
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL迭代器失效问题
- [原]STL迭代器及迭代器失效问题
- 有关STL迭代器失效
- C++:在遍历/循环中删除map元素, 如何避免iter 迭代器失效
- STL迭代器失效问题记录
- STL迭代器失效问题
- C++ 迭代器失效原因
- C++ 迭代器失效
- 【C++builder delphi project rule not found 解决方法 】【注册表 DeleteKey 失效 问题】
- c++ STL迭代器1
- STL迭代器失效问题
- C++ STL中迭代器失效的问题
- C++ Vector swap操作前后迭代器为何不失效