STL 中的 ostream_iterator 和 输入流迭代器 恰好相反,输出流迭代器用于将数据写到指定的输出流(如 cout)中。另外,该类型迭代器本质上属于输出迭代器,假设 p 为一个输出迭代器,则它能执行 ++p
、p++
、*p=t
以及 *p++=t
等类似操作。
其次,输出迭代器底层是通过重载赋值(=)运算符实现的,即借助该运算符,每个赋值给输出流迭代器的元素都会被写入到指定的输出流中。
#include <iterator> using namespace std;
说明
ostream_iterator 的模板类定义在
<iterator>
头文件,并位于 std 命名空间中。创建流迭代器
语法一
std::ostream_iterator<int> out_it(std::cout);
通过调用该模板类的默认构造函数,可以创建了一个指定输出流的迭代器,由此,我们就创建了一个可将 int 类型元素写入到输出流(屏幕)中的迭代器。
语法二
std::ostream_iterator<int> out_it(std::cout,",");
和第一种写入方式不同之处在于,此方式在向输出流写入 int 类型元素的同时,还会附带写入一个逗号(,)。
语法三
std::ostream_iterator<int> out_it1(out_it);
在创建输出流迭代器时,可以用已有的同类型的迭代器,为其初始化。
案例
使用ostream_iterator
使用 ostream_iterator 访问元素
#include <iostream> #include <iterator> #include <string> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; ostream_iterator<string> out_it(cout); *out_it = "https://haicoder.net/cpp/cpp-tutorial.html"; cout << endl; ostream_iterator<int> out_it1(cout, ","); *out_it1 = 1; *out_it1 = 2; *out_it1 = 3; cout << endl; return 0; }
我们在 Linux 下使用 g++ 进行编译,具体命令如下: