std::istreambuf_iterator
|
在标头
<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 读取的输入迭代器 (类模板) |