《C++标准程序库》学习笔记(三)迭代器

    迭代器是一个“可遍历STL容器内全部或部分元素”的对象。一个迭代器用来指出容器中的一个特定位置。迭代器奉行一个纯粹抽象概念:任何东西,只要行为类似迭代器,就是一种迭代器。

 

迭代器的分类(Iterator Categories

    根据能力的不同,迭代器被划分为五种不同类别。

迭代器类型(category

能力

供应者

Input迭代器

向前读取(read

istream

Output迭代器

向前写入(write

ostreaminserter

Forward迭代器

向前读取和写入

 

Bidlrectional迭代器

向前和向后读取和写入

listsetmultisetmapmulitimap

Random access迭代器

随即存取,可读取也可写入

vectordequestringarray

STL预先定义好的所有容器,其迭代器均属于以下两种类型:Bidlrectional迭代器、随即存取迭代器(Random access iterator)。

 

迭代器的基本操作

l  Operator*

l  Operator++

l  Operator==Operator!=

l  Operator=

所有容器类别都提供有一些成员函数,使我们得以获得迭代器并以之遍访所有元素。这些函数中最重要的是:

l  begin()

返回一个迭代器,指向容器起始点,也就是第一个元素(如果有的话)的位置。

l  end()

返回一个迭代器,指向容器结束点。结束点在最后一个元素之后,这样的迭代器又称为“逾尾(past-the-end)”迭代器。

图1 容器的begin()和end()成员函数

迭代器的型别

任何一种容器都定义有两种迭代器型别:

l  container::iterator

以“读/写”模式遍历元素。

l  container::const_iterator

以“只读”模式遍历元素。

 

迭代器相关辅助函数

C++标准程序库为迭代器提供了三个辅助函数:advance()distance()iter_swap()

辅助函数

说明

advance()

前进(或后退)多个元素。

distance()

处理迭代器之间的距离。

iter_swap()

可交换两个迭代器所指元素的内容。

 

迭代器之配接器(Iterator Adapters

C++标准程序库提供了数个预先定义的特殊迭代器,亦即所谓迭代器适配器(iterator adapters)。它们不仅起辅助作用,还能赋予整个迭代器抽象概念更强大的能力。

l  Insert Iterators(安插型迭代器)

l  Stream Iterators(流迭代器)

l  Reverse Iterators(逆向迭代器)

 

1.         Insert Iterators

预先定义的三种Insert Iterators

算式(expression

Inserter种类

容器

back_inserter(container)

使用push_back()在容器尾端安插元素,元素排列次序和安插次序相同。

vectordequelist

front_inserter(container)

使用push_front()在容器前端安插元素,元素排列次序和安插次序相反。

dequelist

inserter(container, pos)

使用insert()pos位置上安插元素,元素排列次序和安插次序相同。

所有STL容器。

 

2.         Stream Iterators

Stream迭代器是一种迭代器配接器,通过它,你可以把stream当成算法的原点和终点。

l  Ostream迭代器  可以将被赋予的值写入output stream中。

l  Istream迭代器   用来从input stream中读取元素。

 

3.         Reverse Iterators

Reverse IteratorsIncrement(递增)运算转换为decrement(递减)运算,反之亦然。所有容器都可以透过成员函数rbegin()rend()产生出Reverse Iterators

l  rbegin()

传回逆向遍历的第一元素位置,也就是实际上最后一个元素的位置。

l  rend()

传回逆向遍历时最后一个元素的下一个位置,也就是实际上第一个元素的前一个位置。

你也可以将一般迭代器转换成一个Reverse迭代器。当然,原本那个迭代器必须具有双向移动能力。注意:转换前后迭代器的逻辑位置发生了变化。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值