◐ Shell
clean mode source ↗

std::istream_iterator - cppreference.com

提供: cppreference.com

<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>

ヘッダ <iterator> で定義

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

(C++17未満)

template< class T, class CharT = char, class Traits = std::char_traits<CharT>, class Distance = std::ptrdiff_t > class istream_iterator;

(C++17以上)

std::istream_iterator は指定された std::basic_istream から適切な operator>> を呼ぶことによって T 型の連続するオブジェクトを読み込むシングルパスの入力イテレータです。 実際の読み込み操作はイテレータが逆参照されたときではなくインクリメントされたときに行われます。 最初のオブジェクトはイテレータが構築されたときに読み込まれます。 逆参照は最も最近読み込んだオブジェクトのコピーを返すだけです。

デフォルト構築された std::istream_iteratorストリーム終端イテレータと言います。 有効な std::istream_iterator がベースとなるストリームの終端に達すると、ストリーム終端イテレータと等しくなります。 それ以降の逆参照またはインクリメントは未定義動作を発生させます。

std::istream_iterator の一般的な実装は、紐付けられた std::basic_istream オブジェクトへのポインタと最も最近読み込んだ T 型の値の、2つのデータメンバを保持します。

TDefaultConstructibleCopyConstructible および CopyAssignable の要件を満たさなければなりません。

メンバ型

メンバ型 定義
iterator_category std::input_iterator_tag
value_type T
difference_type Distance
pointer const T*
reference const T&
char_type CharT
traits_type Traits
istream_type std::basic_istream<CharT, Traits>

メンバ型 iterator_categoryvalue_typedifference_typepointer および referencestd::iterator<std::input_iterator_tag, T, Distance, const T*, const T&> から継承することによって取得することが要求されます。

(C++17未満)

メンバ関数

非メンバ関数

ノート

文字を読み込むとき、 std::istream_iterator はデフォルトでは (std::noskipws などによって無効化されない限り) ホワイトスペースをスキップし、 std::istreambuf_iterator はスキップしません。 また、 std::istreambuf_iterator は文字ごとに sentry オブジェクトを構築、破棄するオーバーヘッドを回避するため、より効率的です。

欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
P0738R2 C++98 the first read may be deferred to the first dereferencing the first read is performed in the constructor

#include <iostream>
#include <sstream>
#include <iterator>
#include <numeric>
#include <algorithm>
 
int main()
{
    std::istringstream str("0.1 0.2 0.3 0.4");
    std::partial_sum(std::istream_iterator<double>(str),
                     std::istream_iterator<double>(),
                     std::ostream_iterator<double>(std::cout, " "));
    
    std::istringstream str2("1 3 5 7 8 9 10");
    std::cout << "\nThe first even number is " <<
        *std::find_if(std::istream_iterator<int>(str2),
                      std::istream_iterator<int>(),
                      [](int i){return i%2 == 0;})
        << ".\n";
    //" 9 10" left in the stream
}

出力:

0.1 0.3 0.6 1 
The first even number is 8.

関連項目