Partilhar via


Classe istream_iterator

Descreve um objeto de iterador de entrada. Extrai objetos da classe Type de um fluxo de entrada, que acessa por meio de um objeto que armazena, do tipo pointer para basic_istream<CharType, Traits>.

Sintaxe

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
O tipo de objeto a ser extraído do fluxo de entrada.

CharType
O tipo que representa o tipo de caractere para istream_iterator. Esse argumento é opcional e o valor padrão é char.

Características
O tipo que representa o tipo de caractere para istream_iterator. Esse argumento é opcional e o valor padrão é char_traits<CharType>.

Distância
Um tipo integral com sinal que representa o tipo de diferença para istream_iterator. Esse argumento é opcional e o valor padrão é ptrdiff_t.

Depois de construir ou incrementar um objeto da classe istream_iterator com um ponteiro armazenado não nulo, o objeto tenta extrair e armazenar um objeto do tipo Type do fluxo de entrada associado. Se a extração falhar, o objeto substitui eficientemente o ponteiro armazenado por um ponteiro nulo, criando um indicador de fim de sequência.

Construtores

Construtor Descrição
istream_iterator Constrói um iterador de fim de fluxo como o istream_iterator padrão ou um istream_iterator inicializado para o tipo de fluxo do iterador do qual ele lê.

Typedefs

Nome do tipo Descrição
char_type Um tipo que é fornecido para o tipo de caractere do istream_iterator.
istream_type Um tipo que é fornecido para o tipo de fluxo da istream_iterator.
traits_type Um tipo que fornece o tipo de característica do caractere da istream_iterator.

Operadores

Operador Descrição
operator* O operador de desreferenciamento retorna o objeto armazenado do tipo Type tratado por istream_iterator.
operator-> Retorna o valor de um membro, se houver.
operador++ Ou extrai um objeto incrementado do fluxo de entrada, ou copia o objeto antes de incrementá-lo e retorna a cópia.

Requisitos

Cabeçalho:<iterator>

Namespace: std

istream_iterator::char_type

Um tipo que é fornecido para o tipo de caractere do istream_iterator.

typedef CharType char_type;

Comentários

O tipo é um sinônimo do parâmetro de modeloChartype.

Exemplo

// 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

Constrói um iterador de fim de fluxo como o istream_iterator padrão ou um istream_iterator inicializado para o tipo de fluxo do iterador do qual ele lê.

istream_iterator();

istream_iterator(istream_type& _Istr);

Parâmetros

_Istr
O fluxo de entrada a ser lido usado para inicializar o istream_iterator.

Comentários

O primeiro construtor inicializa o ponteiro de fluxo de entrada com um ponteiro nulo e cria um iterador de fim do fluxo. O segundo construtor inicializa o ponteiro do fluxo de entrada com &_Istr e tenta extrair e armazenar um objeto do tipo Type.

O iterador de fim do fluxo pode ser usado para testar se um istream_iterator atingiu o final de um fluxo.

Exemplo

// 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

Um tipo que é fornecido para o tipo de fluxo da istream_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Comentários

O tipo é um sinônimo de basic_istream<CharType, Traits>.

Exemplo

Consulte istream_iterator para obter um exemplo de como declarar e usar istream_type.

istream_iterator::operador*

O operador de desreferenciamento retorna o objeto armazenado do tipo Type tratado por istream_iterator.

const Type& operator*() const;

Valor de retorno

O objeto armazenado do tipo Type.

Exemplo

// 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->

Retorna o valor de um membro, se houver.

const Type* operator->() const;

Valor de retorno

O valor de um membro, se houver.

Comentários

i->m é equivalente a (*i).m

O operador retorna &*this.

Exemplo

// 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::operador++

Ou extrai um objeto incrementado do fluxo de entrada, ou copia o objeto antes de incrementá-lo e retorna a cópia.

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

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

Valor de retorno

O primeiro operador membro retorna uma referência ao objeto incrementado do tipo Type extraído do fluxo de entrada e a segunda função membro retorna uma cópia do objeto.

Exemplo

// 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

Um tipo que fornece o tipo de característica do caractere da istream_iterator.

typedef Traits traits_type;

Comentários

O tipo é um sinônimo do parâmetro de modelo Traits.

Exemplo

// 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;
}

Confira também

Struct input_iterator_tag
Struct iterator
<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++