Namespaces
Variants

std:: istream_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定義済みヘッダー <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 の典型的な実装は、 2つのデータメンバを保持します: 関連付けられた std::basic_istream オブジェクトへのポインタと、 型 T の最も最近読み取られた値です。

T DefaultConstructible CopyConstructible 、および 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_category , value_type , difference_type , pointer および reference は、 std:: iterator < std:: input_iterator_tag , T, Distance, const T * , const T & > からの継承によって取得されることが要求される。

(C++17まで)

メンバー関数

新しい istream_iterator を構築する
(public member function)
istream_iterator を破棄する(キャッシュされた値を含む)
(public member function)
現在の要素を返す
(public member function)
イテレータを進める
(public member function)

非メンバー関数

(C++20で削除)
2つの istream_iterator を比較する
(関数テンプレート)

注記

文字を読み取る際、 std::istream_iterator はデフォルトで空白文字をスキップします( std::noskipws または同等の方法で無効化しない限り)。一方、 std::istreambuf_iterator はスキップしません。さらに、 std::istreambuf_iterator は、文字ごとにセントリオブジェクトの構築と破棄のオーバーヘッドを回避するため、より効率的です。

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>
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");
    auto it = std::find_if(std::istream_iterator<int>(str2),
                           std::istream_iterator<int>(),
                           [](int i){ return i % 2 == 0; });
    if (it != std::istream_iterator<int>())
        std::cout << "\nThe first even number is " << *it << ".\n";
    //" 9 10" left in the stream
}

出力:

0.1 0.3 0.6 1 
最初の偶数は 8 です。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR Applied to Behavior as published Correct behavior
P0738R2 C++98 最初の読み取りは最初のデリファレンスまで遅延される可能性がある 常にコンストラクタで実行される

関連項目

std::basic_ostreamに書き込む std::basic_ostream
(クラステンプレート)
std::basic_streambufから読み取る std::basic_streambuf
(クラステンプレート)