Udostępnij za pośrednictwem


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

Chartype
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ówne 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

Prawo
Iterator, dla którego należy sprawdzić równość.

Wartość zwracana

true jeśli oba istreambuf_iterators 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_iteratorlub .

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