The class template
istream_iterator
is an
input iterator that
reads (using
operator>>)
successive elements from the input stream for which it was constructed
. After it is constructed, and every time
++
is used, the iterator reads and stores a value of
T. If the iterator fails to read and store a value of
T
(
fail()
on the stream returns
true),
the iterator becomes equal to the
end-of-stream
iterator value
. The constructor with no arguments
istream_iterator()
always constructs
an end-of-stream input iterator object, which is the only legitimate iterator to be used
for the end condition
. The result of
operator*
on an end-of-stream iterator is not defined
. For any other iterator value a
const T&
is returned
. The result of
operator->
on an end-of-stream iterator is not defined
. For any other iterator value a
const T*
is returned
. The behavior of a program that applies
operator++() to an end-of-stream
iterator is undefined
. It is impossible to store things into istream iterators
. The type
T shall satisfy the
Cpp17DefaultConstructible,
Cpp17CopyConstructible, and
Cpp17CopyAssignable requirements
.Two end-of-stream iterators are always equal
. An end-of-stream iterator is not
equal to a non-end-of-stream iterator
. Two non-end-of-stream iterators are equal when they are constructed from the same stream
.
namespace std {
template<class T, class charT = char, class traits = char_traits<charT>,
class Distance = ptrdiff_t>
class istream_iterator {
public:
using iterator_category = input_iterator_tag;
using value_type = T;
using difference_type = Distance;
using pointer = const T*;
using reference = const T&;
using char_type = charT;
using traits_type = traits;
using istream_type = basic_istream<charT,traits>;
constexpr istream_iterator();
istream_iterator(istream_type& s);
istream_iterator(const istream_iterator& x) = default;
~istream_iterator() = default;
istream_iterator& operator=(const istream_iterator&) = default;
const T& operator*() const;
const T* operator->() const;
istream_iterator& operator++();
istream_iterator operator++(int);
private:
basic_istream<charT,traits>* in_stream; T value; };
template<class T, class charT, class traits, class Distance>
bool operator==(const istream_iterator<T,charT,traits,Distance>& x,
const istream_iterator<T,charT,traits,Distance>& y);
template<class T, class charT, class traits, class Distance>
bool operator!=(const istream_iterator<T,charT,traits,Distance>& x,
const istream_iterator<T,charT,traits,Distance>& y);
}