关闭

C++:标准程序库-STL迭代器Iterator

标签: stl迭代器Iterator
519人阅读 评论(0) 收藏 举报
分类:

http://blog.csdn.net/pipisorry/article/details/71156760

迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。

迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值。使用一个past-the-end值得指针来访问对象是非法的,就好像使用NULL或为初始化的指针一样。

Note: STL不保证可以从另一个迭代器来抵达一个迭代器。例如,当对一个集合中的对象排序时,如果你在不同的结构中指定了两个迭代器,第二个迭代器无法从第一个迭代器抵达,此时程序注定要失败。这是STL灵活性的一个代价。STL不保证检测毫无道理的错误。

迭代器的类型

对于STL数据结构和算法,你可以使用五种迭代器。下面简要说明了这五种类型:

·        Input iterators 提供对数据的只读访问。

·        Output iterators 提供对数据的只写访问

·        Forward iterators 提供读写操作,并能向前推进迭代器。

·        Bidirectional iterators提供读写操作,并能向前和向后操作。

·        Random access iterators提供读写操作,并能在数据中随机移动。

尽管各种不同的STL实现细节方面有所不同,还是可以将上面的迭代器想象为一种类继承关系。从这个意义上说,下面的迭代器继承自上面的迭代器。由于这种继承关系,你可以将一个Forward迭代器作为一个output或input迭代器使用。同样,如果一个算法要求是一个bidirectional 迭代器,那么只能使用该种类型和随机访问迭代器。

[using stl: 三十分钟掌握STL]

正向迭代

vector<string>::iterator gc_it;
for (gc_it = gray_code.begin(); gc_it != gray_code.end(); gc_it++)
    new_gray_code.push_back("0" + *gc_it);
反向迭代

vector<string>::reverse_iterator gc_rit;
for (gc_rit = gray_code.rbegin(); gc_rit != gray_code.rend(); gc_rit++)
    new_gray_code.push_back("1" + *gc_rit);

from: http://blog.csdn.net/pipisorry/article/details/71156760

ref:


0
0
查看评论

C++ STL 迭代器删除问题总结

iterator erase( iterator pos ); 对C++ STL中迭代器的删除需要慎重,如上方法。 1、vector vector在遍历中进行 erase(pos) ,这个时候iter++的时候会出现bug,会跳过一个字段或者coredump。 解决方法:(要删除的时候直接赋...
  • ghosc
  • ghosc
  • 2011-11-24 16:20
  • 8712

STL迭代器(iterator)

迭代器定义 迭代器(iterator):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。共有5种类型 迭代器模式:提供一种方法,使之能够依序寻访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。 STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂(it...
  • wanglelelihuanhuan
  • wanglelelihuanhuan
  • 2016-07-15 20:45
  • 1387

STL Iterator 迭代器

STL 迭代器学习 总结相关概念知识
  • u013174512
  • u013174512
  • 2016-05-21 16:07
  • 903

C++迭代器(iterator)的简单使用

迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。 迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个...
  • Icarus_
  • Icarus_
  • 2016-03-20 20:41
  • 3160

STL中四种随机迭代器

1. 迭代器的存在价值:为所有容器提供一组公共接口,可以遍历容器中所有元素,可以看做是一种smart pointer,因为它重载了++和 * 运算符 2. 四种随机迭代器 vector::iterator - 正向迭代器(相当于指针) vector::const_iterator - ...
  • meetings
  • meetings
  • 2015-07-20 08:37
  • 996

使用reverse_iterator迭代器实现STL容器的反向遍历

某些时候因为一些特殊的
  • chenlycly
  • chenlycly
  • 2014-11-05 21:57
  • 1545

C++ stl之迭代器(iterator)

经过前面对各容器的讲解,相信大家已经对迭代器有一定的了解了,迭代器作为STL中的几大模块之一(系统工具,容器,迭代器,算法,仿函数,string以及iostream),重要性毋庸置疑,现在我们来详细的讨论分析STL中迭代器的用法。 迭代器产生动机: 在早期STL 的实现中,容器和算...
  • effective_coder
  • effective_coder
  • 2013-03-28 21:31
  • 3561

C++标准模板库(STL)迭代器的原理与实现

迭代器(iterator)是一种抽象的设计理念,本文探讨了迭代器的作用与原理,实现了简单的迭代器,并采用trait编程技巧编写了简单算法验证。
  • wutao1530663
  • wutao1530663
  • 2017-03-22 19:18
  • 2037

实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])

遍历一个vector容器有很多种方法,使用起来也是仁者见仁。通过索引遍历:for (i = 0; i<v.size(); i++) { cout << v[i] << " "; }迭代器遍历:for (vInt::const_iterator...
  • wangshubo1989
  • wangshubo1989
  • 2015-12-21 22:01
  • 11143

C++之STL中set的用法总结

set概述和vector、list不同,set、map都是关联式容器。set内部是基于红黑树实现的。插入和删除操作效率较高,因为只需要修改相关指针而不用进行数据的移动。 在进行数据删除操作后,迭代器会不会失效呢?删除set的数据时,实际的操作是删除红黑树中的一个节点,然后相关指针做相关调整。指向其...
  • u010902721
  • u010902721
  • 2015-05-16 21:39
  • 14485
    个人资料
    • 访问:3642796次
    • 积分:30698
    • 等级:
    • 排名:第194名
    • 原创:569篇
    • 转载:30篇
    • 译文:5篇
    • 评论:316条
    Welcome to 皮皮blog~

    博客专栏
    最新评论