std::istreambuf_iterator
来自cppreference.com
定义于头文件 <iterator>
|
||
template< class CharT, class Traits = std::char_traits<CharT> > class istreambuf_iterator : public std::iterator< std::input_iterator_tag, |
(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
抵达底层流结尾时,它变得等于流尾迭代器。解引用或进一步自增它导致未定义行为。
|
(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> 继承获得成员类型 |
(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 读取的输入迭代器 (类模板) |