Compartilhar via


Classe istreambuf_iterator

O modelo de classe istreambuf_iterator descreve um objeto de iterador de entrada que extrai elementos de caractere de um buffer de fluxo de entrada, que acessa por meio de um objeto que armazena, do tipo ponteiro para basic_streambuf<CharType, Traits>.

Sintaxe

template <class CharType class Traits = char_traits <CharType>>
class istreambuf_iterator
: public iterator<input_iterator_tag, CharType, typename Traits ::off_type, CharType*, CharType&>

Parâmetros

CharType
O tipo que representa o tipo de caractere para istreambuf_iterator.

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

Comentários

A classe istreambuf_iterator deve atender aos requisitos de um iterador de entrada.

Após construir ou incrementar um objeto da classe istreambuf_iterator com um ponteiro armazenado não nulo, o objeto tenta, efetivamente, extrair e armazenar um objeto do tipo CharType do fluxo de entrada associado. A extração pode ser atrasada, no entanto, até que o objeto seja desreferenciado ou copiado. 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
istreambuf_iterator Constrói uma istreambuf_iterator que é inicializada para ler caracteres do fluxo de entrada.

Typedefs

Nome do tipo Descrição
char_type Um tipo que é fornecido para o tipo de caractere do ostreambuf_iterator.
int_type Um tipo que fornece um tipo de inteiro para uma istreambuf_iterator.
istream_type Um tipo que é fornecido para o tipo de fluxo da istream_iterator.
streambuf_type Um tipo que é fornecido para o tipo de fluxo da istreambuf_iterator.
traits_type Um tipo que fornece o tipo de característica do caractere da istream_iterator.

Funções de membro

Função de membro Descrição
equal Testa a igualdade entre dois iteradores do buffer de fluxo de entrada.

Operadores

Operador Descrição
operator* O operador de desreferenciamento retorna o próximo caractere no fluxo.
operador++ Ou retorna o próximo caracteres do fluxo de entrada, ou copia o objeto antes de incrementá-lo e retorna a cópia.

Requisitos

Cabeçalho:<iterator>

Namespace: std

istreambuf_iterator::char_type

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

typedef CharType char_type;

Comentários

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

Exemplo

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

int main( )
{
   using namespace std;

   typedef istreambuf_iterator<char>::char_type CHT1;
   typedef istreambuf_iterator<char>::traits_type CHTR1;

   cout << "(Try the example: 'So many dots to be done'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   // istreambuf_iterator for input stream
   istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with dot-separators
   replace_copy ( charInBuf , istreambuf_iterator<char>( ),
        charOut , ' ' , '.' );
}

istreambuf_iterator::igual

Testa a equivalência entre dois iteradores do buffer de fluxo de entrada.

bool equal(const istreambuf_iterator<CharType, Traits>& right) const;

Parâmetros

direita
O iterador com relação ao qual verificar quanto à igualdade.

Valor de retorno

true se os dois istreambuf_iterators forem iteradores de final de fluxo ou se nenhum deles for um iterador de final de fluxo; caso contrário false.

Comentários

Um intervalo é definido pelo istreambuf_iterator para a posição atual e pelo iterador de final de fluxo, mas como todos os iteradores que não são de final de fluxo são equivalentes segundo a função de membro equal, não é possível definir subintervalos usando istreambuf_iterators. Os operadores == e != têm a mesma semântica.

Exemplo

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

int main( )
{
   using namespace std;

   cout << "(Try the example: 'Hello world!'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   istreambuf_iterator<char> charReadIn1 ( cin );
   istreambuf_iterator<char> charReadIn2 ( cin );

   bool b1 = charReadIn1.equal ( charReadIn2 );

   if (b1)
      cout << "The iterators are equal." << endl;
   else
      cout << "The iterators are not equal." << endl;
}

istreambuf_iterator::int_type

Um tipo que fornece um tipo de inteiro para uma istreambuf_iterator.

typedef typename traits_type::int_type int_type;

Comentários

O tipo é um sinônimo de Traits::int_type.

Exemplo

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

int main( )
{
   using namespace std;
   istreambuf_iterator<char>::int_type inttype1 = 100;
   cout << "The inttype1 = " << inttype1 << "." << endl;
}
/* Output:
The inttype1 = 100.
*/

istreambuf_iterator::istream_type

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

typedef basic_istream<CharType, Traits> istream_type;

Comentários

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

Exemplo

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

istreambuf_iterator::istreambuf_iterator

Constrói istreambuf_iterator que é inicializado para ler caracteres do fluxo de entrada.

istreambuf_iterator(streambuf_type* strbuf = 0) throw();
istreambuf_iterator(istream_type& _Istr) throw();

Parâmetros

strbuf
O buffer do fluxo de entrada ao qual o istreambuf_iterator está sendo anexado.

_Istr
O fluxo de entrada ao qual o istreambuf_iterator está sendo anexado.

Comentários

O primeiro construtor inicializa o ponteiro do buffer de fluxo de entrada com strbuf. O segundo construtor inicializa o ponteiro do buffer de fluxo de entrada com _Istr. rdbuf e eventualmente tenta extrair e armazenar um objeto do tipo CharType.

Exemplo

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

int main( )
{
   using namespace std;

   // Following declarations will not compile:
   istreambuf_iterator<char>::istream_type &istrm = cin;
   istreambuf_iterator<char>::streambuf_type *strmbf = cin.rdbuf( );

   cout << "(Try the example: 'Oh what a world!'\n"
      << " then an Enter key to insert into the output,\n"
      << " & use a ctrl-Z Enter key combination to exit): ";
   istreambuf_iterator<char> charReadIn ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with hyphen-separators
   replace_copy ( charReadIn , istreambuf_iterator<char>( ),
      charOut , ' ' , '-' );
}

istreambuf_iterator::operador*

O operador de desreferenciamento retorna o próximo caractere no fluxo.

CharType operator*() const;

Valor de retorno

O caractere seguinte no fluxo.

Exemplo

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

int main( )
{
   using namespace std;

   cout << "Type string of characters & enter to output it,\n"
      << " with stream buffer iterators,(try: 'I'll be back.')\n"
      << " repeat as many times as desired,\n"
      << " then keystroke ctrl-Z Enter to exit program: ";
   istreambuf_iterator<char> inpos ( cin );
   istreambuf_iterator<char> endpos;
   ostreambuf_iterator<char> outpos ( cout );
   while ( inpos != endpos )
   {
*outpos = *inpos;   //Put value of outpos equal to inpos
      ++inpos;
      ++outpos;
   }
}

istreambuf_iterator::operador++

Ou retorna o próximo caracteres do fluxo de entrada, ou copia o objeto antes de incrementá-lo e retorna a cópia.

istreambuf_iterator<CharType, Traits>& operator++();
istreambuf_iterator<CharType, Traits> operator++(int);

Valor de retorno

Um istreambuf_iterator ou uma referência a um istreambuf_iterator.

Comentários

O primeiro operador eventualmente tenta extrair e armazenar um objeto do tipo CharType do fluxo de entrada associado. O segundo operador faz uma cópia do objeto, incrementa o objeto e, em seguida, retorna a cópia.

Exemplo

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

int main( )
{
   using namespace std;

   cout << "Type string of characters & enter to output it,\n"
      << " with stream buffer iterators,(try: 'I'll be back.')\n"
      << " repeat as many times as desired,\n"
      << " then keystroke ctrl-Z Enter to exit program: ";
   istreambuf_iterator<char> inpos ( cin );
   istreambuf_iterator<char> endpos;
   ostreambuf_iterator<char> outpos ( cout );
   while ( inpos != endpos )
   {
*outpos = *inpos;
      ++inpos;   //Increment istreambuf_iterator
      ++outpos;
   }
}

istreambuf_iterator::streambuf_type

Um tipo fornece o tipo de fluxo do istreambuf_iterator.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Comentários

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

Exemplo

Consulte istreambuf_iterator para obter um exemplo de como declarar e usar istreambuf_type.

istreambuf_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

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

int main( )
{
   using namespace std;

   typedef istreambuf_iterator<char>::char_type CHT1;
   typedef istreambuf_iterator<char>::traits_type CHTR1;

   cout << "(Try the example: 'So many dots to be done'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   // istreambuf_iterator for input stream
   istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with dot-separators
   replace_copy ( charInBuf , istreambuf_iterator<char>( ),
        charOut , ' ' , '.' );
}

Confira também

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