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_iterator
s 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_iterator
s. 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++