std::ostreambuf_iterator<CharT,Traits>::ostreambuf_iterator

来自cppreference.com
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
(1)
ostreambuf_iterator( streambuf_type* buffer ) throw();
(C++11 前)
ostreambuf_iterator( streambuf_type* buffer ) noexcept;
(C++11 起)
(2)
ostreambuf_iterator( ostream_type& stream ) throw();
(C++11 前)
ostreambuf_iterator( ostream_type& stream ) noexcept;
(C++11 起)
1) 构造迭代器,将私有的 streambuf_type* 成员设为 buffer 并将 failed() 标志设为 falsebuffer 是空指针时行为未定义。
2)ostreambuf_iterator(stream.rdbuf())

参数

stream - 拥有的 rdbuf() 会被此迭代器访问的输出流
buffer - 此迭代器要访问的输出流缓冲

示例

#include <fstream>
#include <iostream>
#include <iterator>
 
int main()
{
    const char* file = "test.txt";
    {
        std::basic_filebuf<char> f;
        f.open(file, std::ios::out);
        std::ostreambuf_iterator<char> out1(&f);
        *out1 = 'a'; // 通过迭代器写入文件
    }
 
    // 从文件读回
    char a;
    std::cout << ((std::ifstream{file} >> a), a) << std::endl;
 
    std::ostreambuf_iterator<wchar_t> out2{std::wcout};
    *out2 = L'b';
}

输出:

a
b

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 112 C++98 要求"实参不能为空"应用到了重载 (2) 改为应用到重载 (1)
P2325R3 C++20 因为 C++20 迭代器必须是 default_initializable 的而提供了默认构造函数 与该要求一同移除