C++ STL之迭代器注意事项】的更多相关文章

1.两个迭代器组成的区间是前闭后开的 2.如果迭代器的有效性,如果迭代器所指向的元素已经被删除,那么迭代器会失效 http://blog.csdn.net/hsujouchen/article/details/8987233 3.迭代器指向的内容为空的时候(如已经指向end的时候)是不能访问值的,否则运行会崩溃(报错内容iterator not dereferencable) string str_in; cin>>str_in; string ::iterator it; it=str_in…
今天就可以把STL库中迭代器的实现,和类型萃取好好整理一下了 迭代器的设计思维是STL的关键所在,在STL的实际运用和泛型思维,迭代器都扮演着十分重要的角色,STL力求把数据容器和算法的概念分开来,于是就有了STL的两大部分,容器(container)和泛型算法(algorithms),泛型算法有很多参数都是迭代器. 举一个栗子!泛型算法find()的实现! template<class InputIterator, class T> InputIterator find(InputItera…
在开始讲迭代器之前,先列举几个例子,由浅入深的来理解一下为什么要设计迭代器. //对于int类的求和函数 int sum(int *a , int n) { int sum = 0 ; for (int i = 0 ; i < n ; i++) { sum += *a++; } return sum; } //对于listNode类的求和函数 struct ListNode { int val; ListNode * next; }; int sum(ListNode * head) { int…
C++ STL中迭代器(iterators)用于遍历对象集合的元素.由于容器大小随着插入删除等操作动态改变,无法像静态数组那样获取数组长度然后遍历容器里的所有元素:这时就需要迭代器,每次从容器内第一个元素遍历,直到迭代器等于容器的尾迭代器.这些集合可能是容器,也可能是容器的子集.迭代器按照定义方式分成以下四种. 1) 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 2) 常量正向迭代器,定义方法如下: 容器类名::const_iterator 迭代器名; 3) 反向迭代器,…
STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再用一帖粘着剂将它们撮合在一起.没错,这个粘着剂正是迭代器(iterator).迭代器的主要目的是通过遍历来对容器中元素进行相关操作.算法主要通过迭代器来访问容器,也就是说迭代器是容器和算法之间的桥梁.来段代码如例: template <class T, class Allocator = allocator<int> > Class vector {….}; template <class InputIterat…
在学习c++ STL的时候,整天碰到迭代器,也整天用,但是,到底它是个什么东西,很多人没有一个认识.这里我通过几个小的DEMO,来看看迭代器.首先我实现了一个十分简陋的vector类: template <class T> class vector { private: T* pbegin; int n; //当前大小 public: vector() { pbegin = ]; //暂时先固定大小 n = ; } T* begin() { return pbegin; } void inse…
迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值.例如,一个数组索引,也可以认为是一种迭代器. 迭代器有各种不同的创建方法.程序可能把迭代器作为一个变量创建.一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器.作为指针,必须能够使用*操作符类获取数据.你还可以使用其他数学操作符如++.典型的,++操作符用来递增迭代器,以访问容器中的下一个对象…
连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效,因为它们使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置,保证元素的连续性.当上述容器的erase方法可以返回下一个有效的iterator,即erase方法的返回的iterator指向紧接在被删除元素之后的元素的有效迭代器,因此,可以根据这个返回值继续访问后面的元素. 连续内存…
容器支持的迭代器类型  STL Container  Type of Iterators Supported   vector  random access iterators 元素严格有序(类似数组) deque random access iterators list  bidirectional iterators 仅能通过某个 元素找到其直 接前驱和直接 后继(类似链 表) set  bidirectional iterators multiset  bidirectional iter…
my_container.erase(iter); 其中my_container是STL的某种容器,iter是指向这个容器中某个元素的迭代器.如果不是在for,while循环中,这种方式删除元素没有问题,如果是在for,while中对m_container迭代,删除其中符合条件的所有元素,就可能出现问题.如果是在for,while中对m_container迭代,删除其中符合条件的所有元素,就可能出现问题. 问题是: 在迭代容器的时候删除元素,可能导致迭代器失效(invalidation of i…