istreambuf_iterator — Klasa
Szablon klasy istreambuf_iterator opisuje obiekt iteratora wejściowego, który wyodrębnia elementy znaków z buforu strumienia wejściowego, do którego uzyskuje dostęp za pośrednictwem obiektu, który przechowuje, wskaźnika typu na basic_streambuf
<CharType, Traits.>
Składnia
template <class CharType class Traits = char_traits <CharType>>
class istreambuf_iterator
: public iterator<input_iterator_tag, CharType, typename Traits ::off_type, CharType*, CharType&>
Parametry
Typ char
Typ, który reprezentuje typ znaków dla istreambuf_iterator.
Cechy
Typ, który reprezentuje typ znaków dla istreambuf_iterator. Ten argument jest opcjonalny, a wartość domyślna to char_traits
<CharType.>
Uwagi
Klasa istreambuf_iterator musi spełniać wymagania dla iteratora danych wejściowych.
Po utworzeniu lub inkrementacji obiektu klasy istreambuf_iterator ze wskaźnikiem przechowywanym bez wartości null obiekt skutecznie próbuje wyodrębnić i zapisać obiekt typu CharType ze skojarzonego strumienia wejściowego. Wyodrębnianie może być jednak opóźnione, dopóki obiekt nie zostanie wyłuszczone lub skopiowane. Jeśli wyodrębnienie się nie uda, obiekt skutecznie zastępuje przechowywany wskaźnik wskaźnikiem pustym, tworząc wskaźnik końca sekwencji.
Konstruktory
Konstruktor | opis |
---|---|
istreambuf_iterator | Tworzy element istreambuf_iterator inicjowany do odczytywania znaków ze strumienia wejściowego. |
Typedefs
Nazwa typu | opis |
---|---|
char_type | Typ, który zapewnia typ znaku .ostreambuf_iterator |
int_type | Typ, który udostępnia typ liczby całkowitej dla elementu istreambuf_iterator . |
istream_type | Typ, który zapewnia typ strumienia klasy istream_iterator . |
streambuf_type | Typ, który zapewnia typ strumienia klasy istreambuf_iterator . |
traits_type | Typ, który zapewnia typ cech znaków klasy istream_iterator . |
Funkcje składowe
Funkcja składowa | opis |
---|---|
równy | Sprawdza pod kątem równości dwóch iteratorów bufora strumienia wejściowego. |
Operatory
Operator | opis |
---|---|
operator* | Operator dereferencji zwraca następny znak w strumieniu. |
operator++ | Zwraca następny znak ze strumienia wejściowego lub kopiuje obiekt przed jego inkrementacją i zwraca kopię. |
Wymagania
Nagłówek:<iterator>
Przestrzeń nazw: std
istreambuf_iterator::char_type
Typ, który zapewnia typ znaku .ostreambuf_iterator
typedef CharType char_type;
Uwagi
Typ jest synonimem parametru CharType szablonu.
Przykład
// 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
Testy równoważności między dwoma iteratorami buforu strumienia wejściowego.
bool equal(const istreambuf_iterator<CharType, Traits>& right) const;
Parametry
Prawy
Iterator, dla którego należy sprawdzić równość.
Wartość zwracana
true
jeśli oba istreambuf_iterator
s są iteratorami typu end-of-stream lub jeśli żadna z nich nie jest iteratorem końca strumienia; w przeciwnym razie false
.
Uwagi
Zakres jest definiowany przez istreambuf_iterator
element do bieżącej pozycji i iteratora końca strumienia, ale ponieważ wszystkie iteratory strumienia inne niż end-end-of stream są równoważne equal
w funkcji składowej, nie można zdefiniować żadnych podstron przy użyciu s istreambuf_iterator
. Operatory ==
i !=
mają te same semantyki.
Przykład
// 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
Typ, który udostępnia typ liczby całkowitej dla elementu istreambuf_iterator
.
typedef typename traits_type::int_type int_type;
Uwagi
Typ jest synonimem .Traits::int_type
Przykład
// 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
Typ, który zapewnia typ strumienia klasy istreambuf_iterator
.
typedef basic_istream<CharType, Traits> istream_type;
Uwagi
Typ jest synonimem CharTypebasic_istream
<, Traits.>
Przykład
Zobacz istreambuf_iterator , aby zapoznać się z przykładem sposobu deklarowania i używania elementu istream_type
.
istreambuf_iterator::istreambuf_iterator
Tworzy istreambuf_iterator, który jest inicjowany do odczytywania znaków ze strumienia wejściowego.
istreambuf_iterator(streambuf_type* strbuf = 0) throw();
istreambuf_iterator(istream_type& _Istr) throw();
Parametry
strbuf
Bufor strumienia wejściowego istreambuf_iterator
, do którego jest dołączony.
_Istr
Strumień wejściowy, do którego istreambuf_iterator
jest dołączony element .
Uwagi
Pierwszy konstruktor inicjuje wskaźnik wejściowego buforu strumienia ze strbufem. Drugi konstruktor inicjuje wskaźnik wejściowego buforu strumienia z _Istr. rdbuf
, a następnie ostatecznie próbuje wyodrębnić i zapisać obiekt typu CharType
.
Przykład
// 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*
Operator dereferencji zwraca następny znak w strumieniu.
CharType operator*() const;
Wartość zwracana
Następny znak w strumieniu.
Przykład
// 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++
Zwraca następny znak ze strumienia wejściowego lub kopiuje obiekt przed jego inkrementacją i zwraca kopię.
istreambuf_iterator<CharType, Traits>& operator++();
istreambuf_iterator<CharType, Traits> operator++(int);
Wartość zwracana
Odwołanie istreambuf_iterator
do elementu istreambuf_iterator
lub .
Uwagi
Pierwszy operator ostatecznie próbuje wyodrębnić i zapisać obiekt typu CharType
ze skojarzonego strumienia wejściowego. Drugi operator tworzy kopię obiektu, zwiększa obiekt, a następnie zwraca kopię.
Przykład
// 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
Typ, który zapewnia typ strumienia istreambuf_iterator.
typedef basic_streambuf<CharType, Traits> streambuf_type;
Uwagi
Typ jest synonimem CharTypebasic_streambuf
<, Traits.>
Przykład
Zobacz istreambuf_iterator , aby zapoznać się z przykładem sposobu deklarowania i używania elementu istreambuf_type
.
istreambuf_iterator::traits_type
Typ, który zapewnia typ cech znaków klasy istream_iterator
.
typedef Traits traits_type;
Uwagi
Typ jest synonimem cech parametru szablonu.
Przykład
// 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 , ' ' , '.' );
}
Zobacz też
iterator, struktura
<Sterująca>
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++