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