Namespaces
Variants

std:: 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)
Definido en el encabezado <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 & >
(hasta C++17)
template < class T,

class CharT = char ,
class Traits = std:: char_traits < CharT > ,
class Distance = std:: ptrdiff_t >

class istream_iterator ;
(desde C++17)

std::istream_iterator es un iterador de entrada de una sola pasada que lee objetos sucesivos de tipo T desde el objeto std::basic_istream para el cual fue construido, llamando al operator >> apropiado. La operación de lectura real se realiza cuando el iterador es incrementado, no cuando se desreferencia. El primer objeto se lee cuando el iterador es construido. Desreferenciar solo devuelve una copia del objeto más recientemente leído.

El constructor por defecto de std::istream_iterator se conoce como el iterador de fin-de-flujo . Cuando un std::istream_iterator válido alcanza el final del flujo subyacente, se vuelve igual al iterador de fin-de-flujo. Desreferenciarlo o incrementarlo más allá invoca comportamiento indefinido. Un iterador de fin-de-flujo permanece en el estado de fin-de-flujo incluso si el flujo subyacente cambia de estado. Sin una reasignación, no puede volver a ser un iterador que no sea de fin-de-flujo.

Una implementación típica de std::istream_iterator mantiene dos miembros de datos: un puntero al objeto std::basic_istream asociado y el valor más recientemente leído de tipo T .

T debe cumplir con los requisitos DefaultConstructible , CopyConstructible , y CopyAssignable .

Contenidos

Tipos de miembros

Tipo de miembro Definición
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 >

Los tipos de miembro iterator_category , value_type , difference_type , pointer y reference deben obtenerse heredando de std:: iterator < std:: input_iterator_tag , T, Distance, const T * , const T & > .

(hasta C++17)

Funciones miembro

construye un nuevo istream_iterator
(función miembro pública)
destruye un istream_iterator , incluyendo el valor almacenado en caché
(función miembro pública)
devuelve el elemento actual
(función miembro pública)
avanza el iterador
(función miembro pública)

Funciones no miembro

(eliminado en C++20)
compara dos istream_iterator s
(plantilla de función)

Notas

Al leer caracteres, std::istream_iterator omite los espacios en blanco por defecto (a menos que se desactive con std::noskipws o equivalente), mientras que std::istreambuf_iterator no lo hace. Además, std::istreambuf_iterator es más eficiente, ya que evita la sobrecarga de construir y destruir el objeto centinela una vez por carácter.

Ejemplo

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>
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");
    auto it = std::find_if(std::istream_iterator<int>(str2),
                           std::istream_iterator<int>(),
                           [](int i){ return i % 2 == 0; });
    if (it != std::istream_iterator<int>())
        std::cout << "\nEl primer número par es " << *it << ".\n";
    //" 9 10" left in the stream
}

Salida:

0.1 0.3 0.6 1 
El primer número par es 8.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P0738R2 C++98 la primera lectura podría diferirse hasta la primera desreferenciación siempre se realiza en el constructor

Véase también

iterador de salida que escribe en std::basic_ostream
(plantilla de clase)
iterador de entrada que lee desde std::basic_streambuf
(plantilla de clase)