C/C++ STL 之 Iterator 基本元素

这几天开始拜读《泛型编程和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;
	};


其中模板中各类型的含义是

MemberDescribe
_CategoryIterator 类型
_Ty所指向的对象元素类型
_Diff距类型以描述迭代器之间距离,默认ptrdiff_t
_Pointer所指向对象元素指针
_Reference所指向对象元素引用

迭代器类型为常见的五种类型

  1. Input Iterators

  2. Output Iterators

  3. Forward Iterators

  4. Bidirectional Iterators

  5. 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


转载于:https://my.oschina.net/u/1249804/blog/297493

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值