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_iterator
s 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_iterator
s 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 CharType
zu 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