第十六章 string类和标准模板库(3.标准模板库之迭代器)

模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

迭代器提供了遍历容器中值的通用表示。

每个容器类都定义了相应的迭代器类型。

STL描述了5种迭代器概念:

~输入和输出是相对于程序而言的,来自于容器的信息被视为输入;输出指将信息从程序传递给容器。

~输入迭代器:可以递增,但不能倒退,单向迭代器,单通行,用于只读算法;

~输出迭代器:类似于输入迭代器,单通行,用于只写算法;

~正向迭代器:正向迭代器递增后,仍然可以对前面的迭代器值解除引用,支持读和写;

~双向迭代器:双向迭代器支持正向迭代器的所有特性,还支持两种递减运算符;

~随机访问迭代器:支持双向迭代器的所有特性,同时支持随机访问的操作。

在编写算法时尽可能使用最低要求的迭代器。

常规指针是随机访问迭代器的模型。

STL提供了一些预定义的迭代器(在头文件iterator中声明):

1. ostream_iterator模板(输出迭代器概念的模型)

ostream_iterator< int, char > out_iter( cout, " " ); //是一个适配器类,可以使用cout来显示信息

第一个模板参数指出了被发送给数据流的数据类型,第二个模板参数指出了输出流使用的数据类型;

构造函数的第一个参数指出了使用的输出流,第二个参数是发送给输出流的每个数据项后显示的分隔符。

*out_iter++ = 15; //表示将15和空格组成的字符串发送到cout管理的输出流中。

2. istream_iterator模板(输入迭代器概念的模型)

istream_iterator<int, char> inr_iter(cin);

3. reverse_iterator模板

执行递增操作将导致递减。

vector类成员函数rbegin()和rend()返回指向超尾和第一个元素的反向迭代器。

反向指针先递减再解除引用,从而能够遍历反转概念的容器中的所有元素。

4. 插入迭代器(输出迭代器概念的模型)

insert_iterator模板:

insert_iterator< vector<string> > pit( words, words.begin() ); //words是vector<string>类对象

back_insert_iterator模板:只能用于在尾部快速插入的容器

back_insert_iterator< vector<string> > pit( words); //words是vector<string>类对象

front_insert_iterator模板:只能用于在起始位置做快速插入的容器

front_insert_iterator< vector<string> > pit( words); //words是vector<string>类对象

原文地址:https://www.cnblogs.com/sungnox/p/7705155.html