STL ostreambuf_iterator

STL ostreambuf_iterator教程

STL 中的 ostreambuf_iterator 迭代器和 istreambuf_iterator 输入流缓冲区迭代器恰恰相反,ostreambuf_iterator 输出流缓冲区迭代器用于将字符元素写入到指定的流缓冲区中。

实际上,该类型迭代器本质上是一个输出迭代器,这意味着假设 p 为一个输出迭代器,则它仅能执行 ++pp++*p=t 以及 *p++=t 操作。

另外,和 ostream_iterator 输出流迭代器一样,istreambuf_iterator 迭代器底层也是通过重载赋值(=)运算符实现的。换句话说,即通过赋值运算符,每个赋值给输出流缓冲区迭代器的字符元素,都会被写入到指定的流缓冲区中。

STL ostreambuf_iterator详解

头文件

#include <iterator> using namespace std;

说明

ostreambuf_iterator 的模板类定义在 <iterator> 头文件,并位于 std 命名空间中。

创建ostreambuf_iterator

语法一

std::ostreambuf_iterator<char> out_it (std::cout);

通过传递一个流缓冲区对象,即可创建一个输出流缓冲区迭代器,同样,尖括号 <> 中用于指定要写入字符的类型,可以是 char、wchar_t、char16_t 以及 char32_t 等。

语法二

std::ostreambuf_iterator<char> out_it (std::cout.rdbuf());

还可以借助 rdbuf(),传递一个流缓冲区的地址,也可以成功创建输出流缓冲区迭代器。

案例

使用ostreambuf_iterator

使用 ostreambuf_iterator

#include <iostream> #include <iterator> #include <string> #include <algorithm> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; std::ostreambuf_iterator<char> out_it(std::cout); *out_it = 'S'; *out_it = 'T'; *out_it = 'L'; std::string mystring("\nwww.haicoder.net"); std::copy(mystring.begin(), mystring.end(), out_it); cout << endl; return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ ostreambuf_iterator.cpp

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

11_STL ostreambuf_iterator.png

我们使用了 ostreambuf_iterator 输入了元素。

STL ostreambuf_iterator总结

STL 中的 ostreambuf_iterator 迭代器和 istreambuf_iterator 输入流缓冲区迭代器恰恰相反,ostreambuf_iterator 输出流缓冲区迭代器用于将字符元素写入到指定的流缓冲区中。g