Partager via


istreambuf_iterator, classe

Le modèle de classe istreambuf_iterator décrit un objet itérateur d’entrée qui extrait des éléments caractères d’une mémoire tampon de flux d’entrée, auquel il accède via un objet qu’il stocke, du pointeur de type vers basic_streambuf<CharType, Traits.>

Syntaxe

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

Paramètres

CharType
Type qui représente le type de caractère pour istreambuf_iterator.

Caractéristiques
Type qui représente le type de caractère pour istreambuf_iterator. Cet argument est facultatif et la valeur par défaut est char_traits<CharType.>

Notes

La classe istreambuf_iterator doit répondre aux exigences d’un itérateur d’entrée.

Après avoir construit ou incrémenté un objet de classe istreambuf_iterator avec un pointeur stocké non null, l’objet tente d’extraire et de stocker un objet de type CharType à partir du flux d’entrée associé. Toutefois, l’extraction peut être retardée jusqu’à ce que l’objet soit déréférencement ou copié. Si l'extraction échoue, l'objet remplace le pointeur stocké par un pointeur null, créant ainsi un indicateur de fin de séquence.

Constructeurs

Constructeur Description
istreambuf_iterator Construit un istreambuf_iterator qui est initialisé pour lire des caractères à partir du flux d'entrée.

Typedefs

Nom de type Description
char_type Type qui fournit le type de caractère de ostreambuf_iterator.
int_type Type qui fournit un type entier pour un istreambuf_iterator.
istream_type Type qui fournit le type de flux de istream_iterator.
streambuf_type Type qui fournit le type de flux de istreambuf_iterator.
traits_type Type qui fournit le type de caractéristique de istream_iterator.

Fonctions Membre

Fonction membre Description
equal Vérifie l'égalité de deux itérateurs de tampon de flux d'entrée.

Opérateurs

Opérateur Description
operator* L'opérateur de suppression de référence retourne le caractère suivant du flux.
operator++ Retourne le caractère suivant du flux d'entrée ou copie l'objet avant de l'incrémenter et de retourner sa copie.

Spécifications

Header :<iterator>

Espace de noms : std

istreambuf_iterator ::char_type

Type qui fournit le type de caractère de ostreambuf_iterator.

typedef CharType char_type;

Notes

Le type est un synonyme du paramètre de modèle CharType.

Exemple

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

Teste l’équivalence de deux itérateurs de mémoire tampon de flux d’entrée.

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

Paramètres

right
Itérateur pour lequel vérifier l’égalité.

Valeur de retour

true si les deux sont des itérateurs de fin de flux ou si aucun des deux istreambuf_iteratorn’est un itérateur de fin de flux ; sinon false.

Notes

Une plage est définie par la istreambuf_iterator position actuelle et l’itérateur de fin de flux, mais étant donné que tous les itérateurs de flux non-de-fin sont équivalents sous la equal fonction membre, il n’est pas possible de définir des sous-plages à l’aide istreambuf_iteratorde s. Les opérateurs == et != ont la même sémantique.

Exemple

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

Type qui fournit un type entier pour un istreambuf_iterator.

typedef typename traits_type::int_type int_type;

Notes

Le type est un synonyme de Traits::int_type.

Exemple

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

Type qui fournit le type de flux de istreambuf_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Notes

Le type est un synonyme de basic_istream<CharType, Traits>.

Exemple

Pour découvrir comment déclarer et utiliser istream_type, consultez l’exemple relatif à istreambuf_iterator.

istreambuf_iterator ::istreambuf_iterator

Construit un istreambuf_iterator qui est initialisé pour lire des caractères à partir du flux d’entrée.

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

Paramètres

strbuf
Mémoire tampon de flux d’entrée à laquelle le istreambuf_iterator est attaché.

_Istr
Flux d’entrée auquel le istreambuf_iterator est attaché.

Notes

Le premier constructeur initialise le pointeur de mémoire tampon de flux d’entrée avec strbuf. Le deuxième constructeur initialise le pointeur de mémoire tampon de flux d’entrée avec _Istr. rdbuf, puis tente ensuite d’extraire et de stocker un objet de type CharType.

Exemple

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

L'opérateur de suppression de référence retourne le caractère suivant du flux.

CharType operator*() const;

Valeur de retour

Caractère suivant dans le flux.

Exemple

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

Retourne le caractère suivant du flux d'entrée ou copie l'objet avant de l'incrémenter et de retourner sa copie.

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

Valeur de retour

istreambuf_iterator ou une référence à un istreambuf_iterator.

Notes

Le premier opérateur tente finalement d’extraire et de stocker un objet de type CharType à partir du flux d’entrée associé. Le deuxième opérateur effectue une copie de l’objet, incrémente l’objet, puis retourne la copie.

Exemple

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

Type qui fournit le type de flux de istreambuf_iterator.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Notes

Le type est un synonyme de basic_streambuf<CharType, Traits>.

Exemple

Pour découvrir comment déclarer et utiliser istreambuf_type, consultez l’exemple relatif à istreambuf_iterator.

istreambuf_iterator ::traits_type

Type qui fournit le type de caractéristique de istream_iterator.

typedef Traits traits_type;

Notes

Le type est un synonyme du paramètre de modèle Traits.

Exemple

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

Voir aussi

iterator, struct
<iterator>
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++