Compartir vía


istream_iterator (Clase)

Describe un objeto iterador de entrada. Extrae objetos de clase Type de un flujo de entrada al que tiene acceso a través de un objeto que almacena, de tipo pointer en basic_istream<CharType, Traits>.

Sintaxis

template <class Type, class CharType = char, class Traits = char_traits<CharType>, class Distance = ptrdiff_t>
class istream_iterator
: public iterator<
    input_iterator_tag, Type, Distance,
    const Type *,
    const Type&>;

Parámetros

Tipo
Tipo de objeto que se extraerá del flujo de entrada.

CharType
Tipo que representa el tipo de caracteres para istream_iterator. Este argumento es opcional y el valor predeterminado es char.

Rasgos
Tipo que representa el tipo de caracteres para istream_iterator. Este argumento es opcional y el valor predeterminado es char_traits<CharType>.

Distancia
Tipo entero con signo que representa el tipo de diferencia para istream_iterator. Este argumento es opcional y el valor predeterminado es ptrdiff_t.

Después de crear o incrementar un objeto de clase istream_iterator con un puntero almacenado no null, el objeto intenta extraer y almacenar un objeto de tipo Type del flujo de entrada asociado. Si se produce un error en la extracción, el objeto reemplaza el puntero almacenado con un puntero NULL, creando de esta forma un indicador de fin de secuencia.

Constructores

Constructor Descripción
istream_iterator Construye un iterador de fin de secuencia como istream_iterator predeterminado, o bien un istream_iterator inicializado en el tipo de flujo del iterador del que lee.

Typedefs

Nombre de tipo Descripción
char_type Tipo que proporciona el tipo de los caracteres de istream_iterator.
istream_type Tipo que proporciona el tipo de flujo de istream_iterator.
traits_type Tipo que proporciona el tipo de rasgos de los caracteres de istream_iterator.

Operadores

Operador Descripción
operator* El operador de desreferencia devuelve el objeto almacenado de tipo Type señalado por istream_iterator.
operator-> Devuelve el valor de un miembro, si existe.
operator++ Extrae un objeto incrementado del flujo de entrada o copia el objeto antes de aumentarlo y devuelve la copia.

Requisitos

Encabezado:<iterator>

Espacio de nombres: std

istream_iterator::char_type

Tipo que proporciona el tipo de los caracteres de istream_iterator.

typedef CharType char_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla Chartype.

Ejemplo

// istream_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '2 4 f' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::istream_iterator

Construye un iterador de fin de secuencia como istream_iterator predeterminado, o bien un istream_iterator inicializado en el tipo de flujo del iterador del que lee.

istream_iterator();

istream_iterator(istream_type& _Istr);

Parámetros

_Istr
Flujo de entrada que se va a leer usado para inicializar istream_iterator.

Comentarios

El primer constructor inicializa el puntero del flujo de entrada con un puntero null y crea un iterador de fin de flujo. El segundo constructor inicializa el puntero de flujo de entrada con &_Istr y, a continuación, intenta extraer y almacenar un objeto de tipo Type.

El iterador de fin de flujo se puede usar para probar si istream_iterator ha llegado al final de un flujo.

Ejemplo

// istream_iterator_istream_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   // Used in conjunction with copy algorithm
   // to put elements into a vector read from cin
   vector<int> vec ( 4 );
   vector <int>::iterator Iter;

   cout << "Enter 4 integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";
   istream_iterator<int> intvecRead ( cin );

   // Default constructor will test equal to end of stream
   // for delimiting source range of vecor
   copy ( intvecRead , istream_iterator<int>( ) , vec.begin ( ) );
   cin.clear ( );

   cout << "vec = ";
   for ( Iter = vec.begin( ) ; Iter != vec.end( ) ; Iter++ )
      cout << *Iter << " "; cout << endl;
}

istream_iterator::istream_type

Tipo que proporciona el tipo de flujo de istream_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Comentarios

El tipo es sinónimo de basic_istream<CharType, Traits>.

Ejemplo

Vea istream_iterator para obtener un ejemplo de cómo declarar y usar istream_type.

istream_iterator::operator*

El operador de desreferencia devuelve el objeto almacenado de tipo Type señalado por istream_iterator.

const Type& operator*() const;

Valor devuelto

Objeto almacenado de tipo Type.

Ejemplo

// istream_iterator_operator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator->

Devuelve el valor de un miembro, si existe.

const Type* operator->() const;

Valor devuelto

Valor de un miembro, si existe.

Comentarios

i->m equivale a (*i).m.

El operador devuelve &*this.

Ejemplo

// istream_iterator_operator_vm.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
#include <complex>

using namespace std;

int main( )
{
   cout << "Enter complex numbers separated by spaces & then\n"
        << " a character pair ( try example: '(1,2) (3,4) (a,b)' ): ";

   // istream_iterator from stream cin
   istream_iterator< complex<double> > intRead ( cin );

   // End-of-stream iterator
   istream_iterator<complex<double> > EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading the real part: " << intRead ->real( ) << endl;
      cout << "Reading the imaginary part: " << intRead ->imag( ) << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator++

Extrae un objeto incrementado del flujo de entrada o copia el objeto antes de aumentarlo y devuelve la copia.

istream_iterator<Type, CharType, Traits, Distance>& operator++();

istream_iterator<Type, CharType, Traits, Distance> operator++(int);

Valor devuelto

El primer operador miembro devuelve una referencia al objeto incrementado de tipo Type extraído del flujo de entrada y la segunda función miembro devuelve una copia del objeto.

Ejemplo

// istream_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::traits_type

Tipo que proporciona el tipo de rasgos de los caracteres de istream_iterator.

typedef Traits traits_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla Traits.

Ejemplo

// istream_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '10 20 a' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

Consulte también

input_iterator_tag (Struct)
iterator (Struct)
<iterator>
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++