std::istreambuf_iterator

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
流迭代器
istreambuf_iterator
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
 
定义于头文件 <iterator>
template< class CharT, class Traits = std::char_traits<CharT> >

class istreambuf_iterator : public std::iterator< std::input_iterator_tag,
                                                  CharT,
                                                  typename Traits::off_type,
                                                  /* unspecified, usually CharT* */,

                                                  CharT >
(C++17 前)
template< class CharT, class Traits = std::char_traits<CharT> >
class istreambuf_iterator;
(C++17 起)

std::istreambuf_iterator 是单趟迭代器,从为之构造迭代器的 std::basic_streambuf 对象读取相继字符。

默认构造的 std::istreambuf_iterator 迭代器被称为流尾迭代器。合法的 std::istreambuf_iterator 抵达底层流结尾时,它变得等于流尾迭代器。解引用或进一步自增它导致未定义行为。

std::istreambuf_iterator 拥有平凡复制构造函数、 constexpr 默认构造函数和平凡析构函数。

(C++11 起)

成员类型

成员类型 定义
iterator_category std::input_iterator_tag
value_type CharT
difference_type Traits::off_type
pointer /* unspecified, usually CharT* */
reference CharT
char_type CharT
traits_type Traits
int_type typename traits::int_type
streambuf_type std::basic_streambuf<CharT, Traits>
istream_type std::basic_istream<CharT, Traits>
/* proxy */ 实现定义的类类型。名称 proxy 仅为说明。
proxy 对象保有一个 char_type 字符和一个 streambuf_type* 指针。
operator* 解引用 proxy 对象得到存储的字符。

要求通过从 std::iterator<std::input_iterator_tag, CharT, Traits::off_type, /* unspecified, usually CharT* */, CharT> 继承获得成员类型 iterator_categoryvalue_typedifference_typepointerreference

(C++17 前)

成员函数

构造新的 istreambuf_iterator
(公开成员函数)
(析构函数)
(隐式声明)
析构 istreambuf_iterator
(公开成员函数)
(C++11 起)(C++17 前)
获得当前字符的副本
CharT 拥有成员,则访问当前字符的成员
(公开成员函数)
推进迭代器
(公开成员函数)
测试两个 istreambuf_iterator 是否均为流尾或均合法
(公开成员函数)

非成员函数

(C++20 中移除)
比较两个 istreambuf_iterator
(函数模板)

示例

#include <string>
#include <sstream>
#include <iostream>
#include <iterator>
 
int main()
{
    // 典型使用情况:以一对迭代器表示的输入流
    std::istringstream in{"Hello, world"};
    std::istreambuf_iterator<char> it{in}, end;
    std::string ss{it, end};
    std::cout << "ss has " << ss.size() << " bytes; "
                 "it holds \"" << ss << "\"\n";
 
    // 演示单趟本性
    std::istringstream s{"abc"};
    std::istreambuf_iterator<char> i1{s}, i2{s};
    std::cout << "i1 returns '" << *i1 << "'\n"
                 "i2 returns '" << *i2 << "'\n";
    ++i1;
    std::cout << "after incrementing i1, but not i2\n"
                 "i1 returns '" << *i1 << "'\n"
                 "i2 returns '" << *i2 << "'\n";
    ++i2;
    std::cout << "after incrementing i2, but not i1\n"
                 "i1 returns '" << *i1 << "'\n"
                 "i2 returns '" << *i2 << "'\n";
}

输出:

ss has 12 bytes; it holds "Hello, world"
i1 returns 'a'
i2 returns 'a'
after incrementing i1, but not i2
i1 returns 'b'
i2 returns 'b'
after incrementing i2, but not i1
i1 returns 'c'
i2 returns 'c'

参阅

写入 std::basic_streambuf 的输出迭代器
(类模板)
std::basic_istream 读取的输入迭代器
(类模板)