16.4.4 概念、改进和模型(中)
STL提供了一些预定义迭代器
copy(argument1, argument2, argument3)算法
该算法可以将数据从一个容器复制到另一个容器中。这种算法是以
迭代器方式实现的,所以它可以从一种容器到另一种容器进行复制:
- argument1,argument2为迭代器参数,表示复制范围
- argument3也是迭代器参数,表示要将第一个参数复制到什么位置
ostream_iterator模板:
用STL的话说,该模版是输出迭代器概念的一个模型,它也是一个适配器——一个类或函数,可以
将一些其它接口转换为STL使用的接口。
- 包含iterator(以前为iterator.h)
- 声明以创建迭代器ostream_iterator<int, char> out_iter(cout, " ");
- 第一个模板参数(int)指出了被发送给输出流的数据类型;
- 第二个模板参数(char)指出了输出流使用的字符类型
- 构造函数的第一个参数(cout)指出了要使用的输出流
- 最后一个字符串参数是在发送给输出流的每个数据项后显示的分隔符
可以这样使用迭代器:*out_iter++ = 15; // works like cout << 15 << " ";
可以将copy用于迭代器:copy(dice.begin(), dice.end(), out_iter); // copy vector to output stream, 即显示容器内容
可以创建匿名迭代器:copy(dice.begin(), dice.end(), ostream_iterator<int, char> (cout, " "));
istream_iterator模板:
该模版也包含在iterator头文件中,它是一个输入迭代器概念的模型,可以使用两个istream_iterator对象来定义
copy()等的输入范围: copy(istream_iterator<int, char>(cin), istream_eterator<int, char>(), dice.begin());
- 第一个参数指定要读取的数据类型
- 第二个参数指出输入流使用的字符类型
- 使用构造函数cin意味着使用由cin管理的输入流
- 省略构造函数参数表示输入失败(即遇到文件结尾、类型不匹配等情况时结束输入)