std::istreambuf_iterator
来自cppreference.com
在标头 <iterator> 定义
|
||
template< class CharT, class Traits = std::char_traits<CharT> > class istreambuf_iterator : |
(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
|
/* 未指明,通常是 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> |
/* 代理 */ | 实现定义的类类型。名称 代理 只用于说明。代理 对象保有一个 char_type 字符和一个 streambuf_type* 指针。以 operator* 解引用 代理 对象得到存储的字符。
|
要求通过从 std::iterator<std::input_iterator_tag, CharT, Traits::off_type, /* 未指明,通常是 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 拥有 " << ss.size() << " 个字节;" "它持有 \"" << ss << "\"\n"; // 演示单趟本质 std::istringstream s{"abc"}; std::istreambuf_iterator<char> i1{s}, i2{s}; std::cout << "i1 返回 '" << *i1 << "'\n" "i2 返回 '" << *i2 << "'\n"; ++i1; std::cout << "在只自增 i1 但不自增 i2 后:\n" "i1 返回 '" << *i1 << "'\n" "i2 返回 '" << *i2 << "'\n"; ++i2; std::cout << "在只自增 i2 但不自增 i1 后:\n" "i1 返回 '" << *i1 << "'\n" "i2 返回 '" << *i2 << "'\n"; }
输出:
ss 拥有 12 个字节;它持有 "Hello, world" i1 返回 'a' i2 返回 'a' 在只自增 i1 但不自增 i2 后: i1 返回 'b' i2 返回 'b' 在只自增 i2 但不自增 i1 后: i1 返回 'c' i2 返回 'c'
参阅
写入 std::basic_streambuf 的输出迭代器 (类模板) | |
从 std::basic_istream 读取的输入迭代器 (类模板) |