Teilen über


istreambuf_iterator-Klasse

Die Klassenvorlage istreambuf_iterator beschreibt ein Eingabe-Iteratorobjekt, das Zeichenelemente aus einem Eingabedatenstrompuffer extrahiert, auf das er über ein objekt zugreift, das gespeichert wird, vom Typ Zeiger auf basic_streambuf<CharType, Traits.>

Syntax

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

Parameter

CharType
Der Typ, der den Zeichentyp für das istreambuf_iterator-Objekt darstellt.

Merkmale
Der Typ, der den Zeichentyp für das istreambuf_iterator-Objekt darstellt. Dieses Argument ist optional, und der Standardwert ist char_traits<CharType>.

Hinweise

Die istreambuf_iterator-Klasse muss die Anforderungen für einen Eingabeiterator erfüllen.

Nachdem ein Objekt der istreambuf_iterator-Klasse mit einem als nicht null gespeicherten Zeiger erstellt oder inkrementiert wurde, versucht das Objekt effektiv, ein Objekt vom Typ CharType aus dem zugeordneten Eingabestream zu extrahieren und zu speichern. Die Extraktion kann jedoch verzögert werden, bis das Objekt abgeleitet oder kopiert wird. Wenn die Extraktion fehlschlägt, ersetzt das Objekt den gespeicherten Zeiger durch einen NULL-Zeiger und erstellt so einen Indikator für das Ende der Sequenz.

Konstruktoren

Konstruktor Beschreibung
istreambuf_iterator Erstellt ein istreambuf_iterator-Objekt, das initialisiert wird, um Zeichen aus dem Eingabestream zu lesen.

TypeDefs

Typname Beschreibung
char_type Ein Typ, der für den Zeichentyp von ostreambuf_iterator bereitgestellt wird.
int_type Ein Typ, der einen Ganzzahltyp für ein istreambuf_iterator-Objekt bereitstellt.
istream_type Ein Typ, der für den Streamtyp von istream_iterator bereitgestellt wird.
streambuf_type Ein Typ, der für den Streamtyp von istreambuf_iterator bereitgestellt wird.
traits_type Ein Typ, der für den Merkmaltyp von istream_iterator bereitgestellt wird.

Memberfunktionen

Memberfunktion Beschreibung
equal Testet zwei Eingabestreampufferiteratoren auf Gleichheit.

Operatoren

Operator Beschreibung
operator* Der Dereferenzierungsoperator gibt das folgende Zeichen im Stream zurück.
operator++ Gibt entweder das folgende Zeichen im Eingabestream zurück oder kopiert das Objekt vor dem Inkrementieren und gibt die Kopie zurück.

Anforderungen

Header:<iterator>

Namespace: std

istreambuf_iterator::char_type

Ein Typ, der für den Zeichentyp von ostreambuf_iterator bereitgestellt wird.

typedef CharType char_type;

Hinweise

Der Typ stellt ein Synonym für den Vorlagenparameter CharType dar.

Beispiel

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

Testet zwei Eingabestream-Pufferiteratoren auf Äquivalenz.

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

Parameter

right
Der Iterator für die Durchführung von Gleichheitsüberprüfungen.

Rückgabewert

true wenn beide istreambuf_iterators End-of-Stream-Iteratoren sind oder keines der End-of-Stream-Iterator ist; andernfalls false.

Hinweise

Ein Bereich wird durch die istreambuf_iterator aktuelle Position und den End-of-Stream-Iterator definiert, da jedoch alle Nicht-End-of-Stream-Iteratoren unter der equal Memberfunktion gleichwertig sind, ist es nicht möglich, Unterranges mit istreambuf_iterators zu definieren. Die ==- und !=-Operatoren weisen die gleiche Semantik auf.

Beispiel

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

Ein Typ, der einen Ganzzahltyp für ein istreambuf_iterator-Objekt bereitstellt.

typedef typename traits_type::int_type int_type;

Hinweise

Der Typ ist ein Synonym für Traits::int_type.

Beispiel

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

Ein Typ, der für den Streamtyp von istreambuf_iterator bereitgestellt wird.

typedef basic_istream<CharType, Traits> istream_type;

Hinweise

Der Typ ist ein Synonym für basic_istream<CharType, Traits>.

Beispiel

Unter istreambuf_iterator finden Sie ein Beispiel für das Deklarieren und Verwenden von istream_type.

istreambuf_iterator::istreambuf_iterator

Erstellt einen istreambuf_iterator, der initialisiert wird, um Zeichen aus dem Eingabestream zu lesen.

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

Parameter

strbuf
Der Eingabestreampuffer, dem der istreambuf_iterator angefügt wird.

_Istr
Der Eingabestream, dem der istreambuf_iterator angefügt wird.

Hinweise

Der erste Konstruktor initialisiert den Eingabedatenstrompufferzeiger mit strbuf. Der zweite Konstruktor initialisiert den Eingabedatenstrompufferzeiger mit _Istr. rdbuf, und versuchen dann schließlich, ein Objekt vom Typ CharTypezu extrahieren und zu speichern.

Beispiel

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

Der Dereferenzierungsoperator gibt das folgende Zeichen im Stream zurück.

CharType operator*() const;

Rückgabewert

Das nächste Zeichen im Stream.

Beispiel

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

Gibt entweder das folgende Zeichen im Eingabestream zurück oder kopiert das Objekt vor dem Inkrementieren und gibt die Kopie zurück.

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

Rückgabewert

Ein istreambuf_iterator oder ein Verweis auf istreambuf_iterator.

Hinweise

Der erste Operator versucht schließlich, ein Objekt vom Typ CharType aus dem zugeordneten Eingabedatenstrom zu extrahieren und zu speichern. Der zweite Operator erstellt eine Kopie des Objekts, inkrementiert das Objekt und gibt dann die Kopie zurück.

Beispiel

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

Ein Typ, der für den Streamtyp von „istreambuf_iterator“ bereitgestellt wird.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Hinweise

Der Typ ist ein Synonym für basic_streambuf<CharType, Traits>.

Beispiel

Unter istreambuf_iterator finden Sie ein Beispiel für das Deklarieren und Verwenden von istreambuf_type.

istreambuf_iterator::traits_type

Ein Typ, der für den Merkmaltyp von istream_iterator bereitgestellt wird.

typedef Traits traits_type;

Hinweise

Der Typ stellt ein Synonym für den Vorlagenparameter Merkmale dar.

Beispiel

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

Siehe auch

iterator-Struktur
<iterator>
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz