最終更新日時(UTC): 2025年07月11日 17時16分44秒
Koichi Murase が更新

履歴 編集

class template
<iterator>

# std::istream_iterator

    namespace std {
      template <class T, class CharT = char,
                class Traits = char_traits<CharT>, class Distance = ptrdiff_t>
      class istream_iterator
        : public iterator<input_iterator_tag, T, Distance, const T*, const T&>;
    }

## 概要

`istream_iterator`は、`operator++()`でイテレータを進めることにより、入力ストリームの`operator>>()`でストリームからデータを読み込む入力イテレータである。

ストリームからの読み取りが`fail() == true`となる場合に、イテレータは`end`イテレータと等しくなる。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ |
`~istream_iterator() = default` | デストラクタ |
`operator=(const istream_iterator&) = default` `operator=(istream_iterator&&) = default` | 代入演算子 |
`operator*` | 間接参照 |
`operator->` | メンバアクセス |
`operator++` | イテレータをインクリメントする |

## メンバ型

型 | 説明 | 対応バージョン
--- | --- | ---
`char_type` | `CharT (デフォルトはchar)` |
`traits_type` | `Traits (デフォルトはchar_traits<CharT>)` |
`istream_type` | 入力ストリーム型 `basic_istream<CharT, Traits>` |
`difference_type` | `Distance` (デフォルトは`ptrdiff_t`) |
`pointer` | `const T*` |
`value_type` | `T` |
`iterator_category` | `input_iterator_tag` |
`reference` | `const T&` |

## 非メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較 |
`operator!=` | 非等値比較 |

## 例

    #include <iostream>
    #include <iterator>
    #include <sstream>
    #include <algorithm>

    int main()
    {
      // 文字列の入力ストリームにデータを入れる
      std::stringstream ss;
      ss << 1 << std::endl
         << 2 << std::endl
         << 3;

      // 文字列の入力ストリームからデータを読み込むイテレータを作る
      std::istream_iterator<int> it(ss);
      std::istream_iterator<int> last;

      // イテレータを進めることにより、入力ストリームからデータを順に読み取る
      std::for_each(it, last, [](int x) {
        std::cout << x << std::endl;
      });
    }

### 出力

    1
    2
    3

## 関連項目

- `basic_istream_view`: ストリームからデータを読み込むRange

### 参照