STL iterator使用注意事项

当一个Container执行了一次earse操作之后,原来用来遍历的iterator就失效了,其行为是不可预测的,具体情况由实现决定。

同时earse操作会返回一个指向container下一个元素的iterator,如果想继续遍历,就得用返回的iterator继续操作。

如果只是删除遍历时候碰到的第一个符合条件的元素,那么在earse之后添加break,使得不再进行遍历。如果要继续操作,那么就得改成

for ( std::list<*>::iterator it =ObjList.begin(); it != ObjList.end(); )
{
       If((*it)->regin == CheckRegin )
       {
              it= ObjList.earse(it);
       }
       else
      {
              ++it;
      }
}

from:http://blog.csdn.net/hsujouchen/article/details/8987233

时间: 2024-08-13 05:44:40

STL iterator使用注意事项的相关文章

STL Iterator的里里外外(一)?

STL Iterator的里里外外(一)? 1. Iterator是什么? Iterator是指针的概括物(泛型指针),是可以通过一组通用的接口类似于普通指针那样遍历区间中的所有元素的对象.Iterator是完全抽象的概念:任何行为类似于Iterator的东西就是一个Iterator(例如:指针是数组的迭代器). Iterator是算法和数据结构(容器)之间的接口,被实现为一个智能指针,提供对operator*和operaor->等进行重载.但是不同的Iterator具有不同的能力,这就牵扯到了

STL iterator和traits编程技法

今天终于看完了<STL源码分析>,最近忙于两个比赛的各种文档,没时间写东西,趁着看完的劲,把欠下的补上来. <Design patterns>中对于iterator模式描述如下:提供一种方法,使之能够依序寻访某个聚合物所含的各个元素,而又无需暴露该聚合物的内部结构.在STL中,iterator扮演着连接container和algorithms的作用,下面以STL find()函数展现一下iterator在container和algorithm之间的连接作用. template &l

C++ STL之迭代器注意事项

1.两个迭代器组成的区间是前闭后开的 2.如果迭代器的有效性,如果迭代器所指向的元素已经被删除,那么迭代器会失效 http://blog.csdn.net/hsujouchen/article/details/8987233 3.迭代器指向的内容为空的时候(如已经指向end的时候)是不能访问值的,否则运行会崩溃(报错内容iterator not dereferencable) 1 string str_in; 2 cin>>str_in; 3 string ::iterator it; 4 i

struts 中 s:iterator 使用注意事项

后台定义类 public class Course_pj { private String _id; private String _courseid; private String _course_page_id; public String _itemid; private String _item_result; public String _userid; private String _classid; public String GetID() { return _id; } pub

c++STL排序算法注意事项

关于算法中的比较函数 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int compare(double a,double b){ 5 return a>b; 6 } 7 int main(){ 8 double a[10]={2.15,2.14,3.11,3.1010001,5,8,46,5,45,10}; 9 double b[10]={2.15,2.14,3.11,3.101000

STL源码分析-iterator(迭代器)

1. GOF 迭代器设计模式 前面一篇文章有写到stl_list的实现,也实现了一下相应的iterator,但是后面觉得,实现具体容器之前有必要介绍一下iterator(迭代器) .那么迭代器是什么呢? GOF的设计模式是这样定义的: 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 大概意思是,例如一个聚合对象(list),我们该如何来访问它的元素,而又不暴露内部结构:而且还要针对不同的需要,可能以不同的方式遍历这个list:那么即使,我们知道大概会有哪些遍历操作,那

STL,ATL,WTL之间的联系和区别

一.STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于

C++ Standard Template Library STL(undone)

目录 1. C++标准模版库(Standard Template Library STL) 2. C++ STL容器 3. C++ STL 顺序性容器 4. C++ STL 关联式容器 5. C++ STL 容器适配器 6. C++ STL算法 7. C++ STL边界限制 1. C++标准模版库(STL) STL就是Standard Template Library,标准模板库.从根本上说 1. STL是一些"容器"集合 2. STL也是算法和其他一些组件的集合 3. 这里的&quo

【C/C++】STL,ATL,WTL之间的联系和区别

STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统