C/C++ STL 之 Iterator 基本元素
2014-08-03 00:00
471 查看
摘要: 粗浅介绍下C++STL库中Iterator类
这几天开始拜读《泛型编程和STL》,没想到一开始就遇到“老虎”-- Iterator,文章第二、三章均围绕其展开。平时在使用vector,map的迭代器的时候倒是没有注意到原来迭代器也如此美妙。随即百度之以便自行补脑,但发现不少都是基本的使用,对于我这样技术小白,自然很多不是完全顿悟。心想,算了,还是自己研究下Iterator吧。
按《泛型编程和STL》中介绍是这样,Iterator是指针的概括物:它们是用来指向其他对象的一种对象,这对于像find这样的泛型算法很重要,因为它们可以用来在对象区间内移动。Iterator对于泛型编程重要在于,它是算法与数据结构之间的接口。
Iterator模板类的定义在<xutility>中,而并不是在<iterator>。
其中模板中各类型的含义是
迭代器类型为常见的五种类型
Input Iterators
Output Iterators
Forward Iterators
Bidirectional Iterators
Random Access Iterators
主要差别与联系可见 http://www.cplusplus.com/reference/iterator/
为便于理解,转一个关于Iterator类的例子
如果错误还请轻拍。
文章参考:
【1】http://www.cplusplus.com/reference/iterator/
【2】http://http://msdn.microsoft.com/en-us/library/x9be4t1b.aspx
这几天开始拜读《泛型编程和STL》,没想到一开始就遇到“老虎”-- Iterator,文章第二、三章均围绕其展开。平时在使用vector,map的迭代器的时候倒是没有注意到原来迭代器也如此美妙。随即百度之以便自行补脑,但发现不少都是基本的使用,对于我这样技术小白,自然很多不是完全顿悟。心想,算了,还是自己研究下Iterator吧。
按《泛型编程和STL》中介绍是这样,Iterator是指针的概括物:它们是用来指向其他对象的一种对象,这对于像find这样的泛型算法很重要,因为它们可以用来在对象区间内移动。Iterator对于泛型编程重要在于,它是算法与数据结构之间的接口。
Iterator模板类的定义在<xutility>中,而并不是在<iterator>。
// TEMPLATE CLASS iterator template<class _Category, class _Ty, class _Diff = ptrdiff_t, class _Pointer = _Ty *, class _Reference = _Ty&> struct iterator { // base type for all iterator classes typedef _Category iterator_category; typedef _Ty value_type; typedef _Diff difference_type; typedef _Diff distance_type; // retained typedef _Pointer pointer; typedef _Reference reference; };
其中模板中各类型的含义是
Member | Describe |
_Category | Iterator 类型 |
_Ty | 所指向的对象元素类型 |
_Diff | 距类型以描述迭代器之间距离,默认ptrdiff_t |
_Pointer | 所指向对象元素指针 |
_Reference | 所指向对象元素引用 |
Input Iterators
Output Iterators
Forward Iterators
Bidirectional Iterators
Random Access Iterators
主要差别与联系可见 http://www.cplusplus.com/reference/iterator/
为便于理解,转一个关于Iterator类的例子
// std::iterator example #include <iostream> // std::cout #include <iterator> // std::iterator, std::input_iterator_tag class MyIterator : public std::iterator<std::input_iterator_tag, int> { int* p; public: MyIterator(int* x) :p(x) {} MyIterator(const MyIterator& mit) : p(mit.p) {} MyIterator& operator++() {++p;return *this;} MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;} bool operator==(const MyIterator& rhs) {return p==rhs.p;} bool operator!=(const MyIterator& rhs) {return p!=rhs.p;} int& operator*() {return *p;} }; int main () { int numbers[]={10,20,30,40,50}; MyIterator from(numbers); MyIterator until(numbers+5); for (MyIterator it=from; it!=until; it++) std::cout << *it << ' '; std::cout << '\n'; return 0; }
如果错误还请轻拍。
文章参考:
【1】http://www.cplusplus.com/reference/iterator/
【2】http://http://msdn.microsoft.com/en-us/library/x9be4t1b.aspx
相关文章推荐
- C++ STL基本容器比较
- C++ and STL: Take Advantage of STL Algorithms by Implementing a Custom Iterator
- 细数C++ STL 的那些事---set(元素唯一,且排序)
- 元素类型C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- (转载)用C++中STL提供的fstream和stream_iterator读写二进制文件
- 对C++ STL,list元素的循环删除操作
- C++STL程序:全排列,删除、插入元素。
- C++ stl编程之Vector删除后iterator可能失效
- C++ STL基本容器比较
- 从零开始学C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- C++ STL基本容器string,vector,list,deque,map..[转]
- C++ STL基本容器比较
- C++ STL iterator
- 【C++ STL学习之八】逆向迭代器reverse_iterator
- C++ STL 容器 的 基本特性 和 原理
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- C++ STL基本容器比较
- 对C++ STL,list元素的循环删除操作 //断链,出错地方
- c++中的STL基本容器介绍
- C++STL容器的基本特性和原理