STL 5: STL之迭代器

 

迭代器 Iterator

迭代器与容器

通过迭代器,我们可以用相同的方式来访问、遍历容器 (每种容器必须提供自己的迭代器)  [泛型抽象]

 

迭代器是一个可遍历STL容器内全部或部分元素的对象。

一个迭代器指出容器中的一个特定位置。

具有遍历复杂数据结构的能力。

不同容器提供自己的迭代器,所以不同迭代器具有不同的能力。

不同的算法需要不同的迭代器的能力;

相同的算法需要根据迭代器的能力不同而做相应的优化

因此尽管算法里已经有Sort功能,但是List还是提供了自己的sort成员函数

我们有充分的理由相信ListSort更高效,因为这个Sort是针对List的迭代器进行优化的。

 

1. 迭代器的基本操作

 

l        Operator *

传回当前位置上的元素值。直接以operator->取用他们

 

l        Operator ++

将迭代器推到下一个元素,有些也可以支持

 

l        Operator== Operator=

判断两个迭代器是否在一个位置

 

l        Operator =

为迭代器赋值

 

2. 迭代器的分类

 

Input iteratorread only不能改变iterator所指对象

Output iteratorwrite only

Forward iterator:单向迭代器,iter++

Bidirectional iterator:双向迭代器,iter++iter--

Random access iterator:所有指针的运算能力,p+n, p-n, p[n], p1-p2, p1<p2

 

            input iterator     output iterator

                  forward iterator

                  bidirectional iterator

                  random iterator

 

一个例子--advance()

Template <class InputIterator,class Distance)

Void advance_II(InputIterator& I, Distance n)

{

   For( ; n>0; --n,++i); //单向,逐一前进

}

Template <class BidirectionalIterator, class Distance>

Void advance_BI(BidirectionalITterator& i,Distance n)

{

       if (n>=0) //双向,逐一前进

              For(;n>0;--n,++i){}

else

For(;n<0;++n,--i){}

}

Template<class RandomAccessIterator,class Distance>

Void advance_RAI(RandomAccessIterator& I,Distance n)

{

     i+=n; //随机,跳跃前进

}

 

迭代器的traits编程技法

 

3. Iterator adaptor(迭代器配接器)

概念

提供和iterator相同的接口,但是改变内部的实现方法。

分类

Insert iterator

Stream iterator

Reverse iterator

 

Insert(安插型)iterator

List<int> coll1;

for(int i = 1; i<=4; ++i)

coll1.push_back(i);

……

Copy(coll1.begin(),coll1.end(),back_inserter(coll2));

Copy(coll1.begin(),coll1.end(),front_inserter(coll3));

Copy(coll1.begin(),coll1.end(),inserter(coll4,coll4.begin());

Result:

1,2,3,4

4,3,2,1

1,2,3,4

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值