STL 迭代器共分为5大类型。
(1)输入迭代器
(2)输出迭代器
(3)前向迭代器
(4)双向迭代器
(5)随机迭代器
输入迭代器
按顺序只读一次。完成的功能有:能进行构造和缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步
前移动,能进行读取值。输入迭代器重载主要操作符 如下所示。
操作符 | 说明 |
operate* | 访问迭代元素值 |
operate++() | 前置迭代指针++ |
operate++(int) | 后置迭代指针++ |
operate== | 迭代元素相等比较 |
operate!= | 迭代元素不等比较 |
STL提供的主要输入迭代器是istream_iterator,支持表中的所有操作,值得注意的是它的构造函数,有两种形式:
istream_iterator()
默认的构造器,创建了一个流结束的迭代器。
istream_iterator(istream &)
参数是输入流。含义是从输入流中读数据,当遇到流结束符时停止。
利用istream_iterator迭代器迭代标准输入流。
#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char* argv[])
{
cout << “请输入数据(如111 222 333,(,结束)):”;
istream_iterator<int> a(cin) ; //建立键盘输入流,用istream_iterator枚举整形数据
istream_iterator<int> b; //建立输入流结束迭代器
while(1)
{
cout << *a << endl; //输出整形数据调用operator*()
a ++ ; //迭代器指针指向下一个元素—>调用operator++(int)
if(a == b) //如果当前迭代器等于结束迭代器,则operator==
{ //退出while循环
break;
}
}
}<span style="font-size: 30px;">
</span>
程序执行结果为:
请输入数据(如111 222 333,):111 222 333,
111
222
333
程序分析:
当迭代指针a等于b 时到达尾部,输入最后要有个逗号,这是由于迭代类型是整型数,若无逗号,将一直执行,只要在流中输入非整型数,迭代器到此位置认为它不是整数,这时才会停止。(当然不一定非得是逗号,只要是非整性数都是可以的)。
输出迭代器
只写一次,完成的功能有:能进行构造或缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步前向移动,能进行写入值(*p=x,但不能读出)。输出迭代器重载主要操作符 如下所示。
操作符 | 说明 |
operate* | 分配迭代元素值空间 |
operate= | 写入元素值 |
operate++() | 前置迭代指针++ |
operate++(int) | 后置迭代指针++ |
STL提供的主要输出迭代器是ostream_iterator,支持表2.2中的所有操作,值得注意的是它的构造函数,有两种形式:
ostream_iterator(ostream& out)
创建了流输出跌代器, 用来迭代out输出流。
ostream_iterator(ostream& out, const char *delim)
创建了流输出迭代器, 用来向out输出流输出数据,输出的数据之间用delim字符串分割,也即是每向out输出流输出一个数据后,再向out输出流输出一个分隔符delim。
利用ostream_iterator向屏幕输出数据
#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char* argv[])
{
cout << "输出迭代器演示结果为: " ;
ostream_iterator<int> myout(cout, "\t"); //创建标准输出迭代器
*myout = 1;
myout ++;
*myout = 2;
myout ++;
*myout = 3;
return 0;
}
执行结果为:
输出迭代器演示结果为:1 2 3