Files
cppdraft_translate/cppdraft/istream/iterator.md
2025-10-25 03:02:53 +03:00

7.1 KiB

[istream.iterator]

24 Iterators library [iterators]

24.6 Stream iterators [stream.iterators]

24.6.2 Class template istream_iterator [istream.iterator]

24.6.2.1 General [istream.iterator.general]

1

#

The class template istream_iterator is an input iterator ([input.iterators]) that reads successive elements from the input stream for which it was constructed.

namespace std {template<class T, class charT = char, class traits = char_traits, 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(); constexpr istream_iterator(default_sentinel_t); istream_iterator(istream_type& s); constexpr istream_iterator(const istream_iterator& x) noexcept(see below); ~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); friend bool operator==(const istream_iterator& i, default_sentinel_t); private: basic_istream<charT,traits>* in_stream; // exposition only T value; // exposition only};}

2

#

The type T shall meet the Cpp17DefaultConstructible,Cpp17CopyConstructible, and Cpp17CopyAssignable requirements.

24.6.2.2 Constructors and destructor [istream.iterator.cons]

🔗

constexpr istream_iterator(); constexpr istream_iterator(default_sentinel_t);

1

#

Effects: Constructs the end-of-stream iterator, value-initializing value.

2

#

Postconditions: in_stream == nullptr is true.

3

#

Remarks: If the initializer T() in the declaration auto x = T(); is a constant initializer ([expr.const]), then these constructors are constexpr constructors.

🔗

istream_iterator(istream_type& s);

4

#

Effects: Initializes in_stream with addressof(s), value-initializes value, and then calls operator++().

🔗

constexpr istream_iterator(const istream_iterator& x) noexcept(see below);

5

#

Effects: Initializes in_stream with x.in_stream and initializes value with x.value.

6

#

Remarks: An invocation of this constructor may be used in a core constant expression if and only if the initialization of value from x.value is a constant subexpression ([defns.const.subexpr]).

The exception specification is equivalent tois_nothrow_copy_constructible_v.

🔗

~istream_iterator() = default;

7

#

Remarks: If is_trivially_destructible_v is true, then this destructor is trivial.

24.6.2.3 Operations [istream.iterator.ops]

🔗

const T& operator*() const;

1

#

Preconditions: in_stream != nullptr is true.

2

#

Returns: value.

🔗

const T* operator->() const;

3

#

Preconditions: in_stream != nullptr is true.

4

#

Returns: addressof(value).

🔗

istream_iterator& operator++();

5

#

Preconditions: in_stream != nullptr is true.

6

#

Effects: Equivalent to:if (!(*in_stream >> value)) in_stream = nullptr;

7

#

Returns: *this.

🔗

istream_iterator operator++(int);

8

#

Preconditions: in_stream != nullptr is true.

9

#

Effects: Equivalent to:istream_iterator tmp = *this;++*this;return tmp;

🔗

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);

10

#

Returns: x.in_stream == y.in_stream.

🔗

friend bool operator==(const istream_iterator& i, default_sentinel_t);

11

#

Returns: !i.in_stream.