最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

class template
<iterator>

# std::istreambuf_iterator

    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

## 関連項目

- `basic_streambuf`