名前空間
変種
操作

std::istream_iterator

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
ユーティリティ
イテレータアダプタ
ストリームイテレータ
istream_iterator
イテレータのカスタマイゼーションポイント
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(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 の一般的な実装は、紐付けられた 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未満)

[編集] メンバ関数

新しい istream_iterator を構築します
(パブリックメンバ関数) [edit]
istream_iterator (キャッシュされた値も含む) を破棄します
(パブリックメンバ関数) [edit]
現在の要素を返します
(パブリックメンバ関数) [edit]
イテレータを進めます
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

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

[編集] ノート

文字を読み込むとき、 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.

[編集] 関連項目

std::basic_ostream に書き込む出力イテレータ
(クラステンプレート) [edit]
std::basic_streambuf から読み込む入力イテレータ
(クラステンプレート) [edit]