名前空間
変種
操作

std::istream_iterator

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータプリミティブ
イテレータアダプタ
ストリームイテレータ
istream_iterator
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++14)(C++14)
(C++14)(C++14)
コンテナアクセス
(C++17)
(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 の要件を満たさなければなりません。

目次

[編集] メンバ型

メンバ型 定義
char_type CharT
traits_type Traits
istream_type std::basic_istream<CharT, Traits>

[編集] メンバ関数

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

[編集] 非メンバ関数

2つの istream_iterator を比較します
(関数テンプレート) [edit]

[編集] メンバ型

メンバ型 定義
value_type T
difference_type Distance
pointer const T*
reference const T&
iterator_category std::input_iterator_tag

これらのメンバ型は std::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 オブジェクトを構築、破棄するオーバーヘッドを回避するため、より効率的です。

仕様では最初の読み込みを std::istream_iterator が最初に逆参照されたときに遅延することが公式に認められています。 これは lwg245 によって再確認されましたが、 p0738 によって実装不可能であるとして異議が唱えられています。 既存の実装はすべて最初の読み込みをコンストラクタで直ちに行います。

[編集]

#include <iostream>
#include <sstream>
#include <iterator>
#include <numeric>
 
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, " "));
}

出力:

0.1 0.3 0.6 1

[編集] 関連項目

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