namespace std {
template <class CharT, class Traits = char_traits<CharT> >
class istreambuf_iterator
: public iterator<input_iterator_tag, CharT, typename Traits::off_type, unspecified, CharT>;
}
概要
istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。
ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。
istream_iteratorとは異なり、スペースや改行が読み飛ばされることはない。いくつかのメンバ関数は、同じstreambufオブジェクトを参照するためにプロキシオブジェクトを返す。
メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(constructor) |
コンストラクタ | |
~istreambuf_iterator() = default |
デストラクタ | |
operator* |
間接参照 | |
operator-> |
メンバアクセス | C++11 |
operator++ |
イテレータをインクリメントする | |
equal |
istreambuf_iteratorオブジェクトの等値比較 |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
char_type |
CharT |
|
traits_type |
Traits (デフォルトはchar_traits<CharT>) |
|
int_type |
Traits::int_type |
|
streambuf_type |
basic_streambuf<CharT, Traits> |
|
istream_type |
basic_istream<CharT, Traits> |
|
difference_type |
Traits::off_type |
|
pointer |
未規定 | |
value_type |
CharT |
|
iterator_category |
input_iterator_tag |
|
reference |
CharT |
非メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator== |
等値比較 | |
operator!= |
非等値比較 |
例
#include <iostream>
#include <iterator>
#include <sstream>
#include <algorithm> // for_each
int main()
{
std::stringstream ss;
ss << "1 2 3" << std::endl
<< "4 5 6";
// 文字列の入力ストリームから順に文字を読み込むイテレータを用意
std::istreambuf_iterator<char> it(ss);
std::istreambuf_iterator<char> last;
// イテレータを進めることにより、入力ストリームからデータを順に読み取る
std::for_each(it, last, [](char c) { std::cout << c; });
}
出力
1 2 3
4 5 6