Namespaces
Variants

std::istream_iterator<T,CharT,Traits,Distance>:: 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)
(1)
istream_iterator ( ) ;
(C++11まで)
constexpr istream_iterator ( ) ;
(C++11から)
constexpr istream_iterator ( std:: default_sentinel_t ) ;
(2) (C++20から)
istream_iterator ( istream_type & stream ) ;
(3)
(4)
istream_iterator ( const istream_iterator & other ) ;
(C++11まで)
istream_iterator ( const istream_iterator & other ) = default ;
(C++11から)
1,2) エンドオブストリームイテレータを構築します 、格納された値を値初期化します。このコンストラクタは、定義内の初期化子 auto x = T ( ) ; が定数初期化子である場合、constexprとなります (C++11以降)
3) イテレータを初期化し、 stream のアドレスをデータメンバに格納し、入力ストリームからの最初の読み取りを実行してキャッシュされた値のデータメンバを初期化します。
4) other のコピーを構築する。 std:: is_trivially_copy_constructible < T > :: value true の場合、このコピーコンストラクタは自明なコピーコンストラクタとなる。 (C++11以降)

パラメータ

stream - istream_iterator を初期化するストリーム
other - 同じ型の別の istream_iterator

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
int main()
{
    std::istringstream stream("1 2 3 4 5");
    std::copy(
        std::istream_iterator<int>(stream),
        std::istream_iterator<int>(),
        std::ostream_iterator<int>(std::cout, " ")
    );
}

出力:

1 2 3 4 5

不具合報告

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

DR 適用対象 公開時の動作 正しい動作
LWG 1280 C++98 オーバーロード (3) stream を直接格納 代わりにそのアドレスを格納
P0738R2 C++98 最初の読み取りは最初のデリファレンスまで遅延される可能性がある 常にコンストラクタで実行される