Compartir a través de


istreambuf_iterator (Clase)

La plantilla de clase istreambuf_iterator describe un objeto de iterador de entrada que extrae elementos de carácter de un búfer de flujo de entrada, al que se obtiene acceso mediante un objeto que almacena, de tipo puntero a basic_streambuf<CharType, Traits>.

Sintaxis

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
Tipo que representa el tipo de caracteres para istreambuf_iterator.

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

Comentarios

La clase istreambuf_iterator debe satisfacer los requisitos de un iterador de entrada.

Después de crear o de incrementar un objeto de clase istreambuf_iterator con un puntero almacenado no null, el objeto intenta extraer y almacenar un objeto de tipo CharType del flujo de entrada asociado. Sin embargo, la extracción se puede retrasar hasta que el objeto se desreferencia o se copia. 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
istreambuf_iterator Construye una clase istreambuf_iterator que se inicializa para leer caracteres del flujo de entrada.

Typedefs

Nombre de tipo Descripción
char_type Tipo que proporciona el tipo de los caracteres de ostreambuf_iterator.
int_type Tipo que proporciona un tipo entero para istreambuf_iterator.
istream_type Tipo que proporciona el tipo de flujo de istream_iterator.
streambuf_type Tipo que proporciona el tipo de flujo de istreambuf_iterator.
traits_type Tipo que proporciona el tipo de rasgos de los caracteres de istream_iterator.

Funciones miembro

Función de miembro Descripción
equal Comprueba si dos iteradores de búfer del flujo de entrada son iguales.

Operadores

Operador Descripción
operator* El operador de desreferenciación devuelve el siguiente carácter del flujo.
operator++ Devuelve el siguiente carácter del flujo de entrada o copia el objeto antes de incrementarlo y devuelve la copia.

Requisitos

Encabezado:<iterator>

Espacio de nombres: std

istreambuf_iterator::char_type

Tipo que proporciona el tipo de los caracteres de ostreambuf_iterator.

typedef CharType char_type;

Comentarios

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

Ejemplo

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

Comprueba si dos iteradores de búfer del flujo de entrada son equivalentes.

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

Parámetros

right
Iterador con el que se va a comprobar la igualdad.

Valor devuelto

true si ambos istreambuf_iterator son iteradores de fin de flujo o si ninguno es un iterador de fin de flujo; en caso contrario, false.

Comentarios

Un intervalo se define mediante el istreambuf_iterator en la posición actual y el iterador de fin de flujo, pero dado que todos los iteradores que no son de fin de flujo son equivalentes en la función miembro equal, no es posible definir ningún subintervalo mediante istreambuf_iterator. Los operadores == y != tienen la misma semántica.

Ejemplo

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

Tipo que proporciona un tipo entero para istreambuf_iterator.

typedef typename traits_type::int_type int_type;

Comentarios

El tipo es un sinónimo de Traits::int_type.

Ejemplo

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

Tipo que proporciona el tipo de flujo de istreambuf_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Comentarios

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

Ejemplo

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

istreambuf_iterator::istreambuf_iterator

Construye un istreambuf_iterator que se inicializa para leer caracteres del flujo de entrada.

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

Parámetros

strbuf
Búfer de flujo de entrada al que se va a adjuntar istreambuf_iterator.

_Istr
Flujo de entrada al que se va a adjuntar istreambuf_iterator.

Comentarios

El primer constructor inicializa el puntero de búfer de flujo de entrada con strbuf. El segundo constructor inicializa el puntero de búfer de flujo de entrada con _lstr. rdbuf y, después, intenta extraer y almacenar un objeto de tipo CharType.

Ejemplo

// 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::operator*

El operador de desreferenciación devuelve el siguiente carácter del flujo.

CharType operator*() const;

Valor devuelto

Siguiente carácter del flujo.

Ejemplo

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

Devuelve el siguiente carácter del flujo de entrada o copia el objeto antes de incrementarlo y devuelve la copia.

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

Valor devuelto

istreambuf_iterator o referencia a istreambuf_iterator.

Comentarios

El primer operador al final intenta extraer y almacenar un objeto de tipo CharType del flujo de entrada asociado. El segundo operador realiza una copia del objeto, lo incrementa y, después, devuelve la copia.

Ejemplo

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

Tipo que proporciona el tipo de flujo de istreambuf_iterator.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Comentarios

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

Ejemplo

Vea istreambuf_iterator para obtener un ejemplo de cómo declarar y usar istreambuf_type.

istreambuf_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

// 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 , ' ' , '.' );
}

Consulte también

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