Sdílet prostřednictvím


istreambuf_iterator – třída

Šablona třídy istreambuf_iterator popisuje vstupní objekt iterátoru, který extrahuje prvky znaků ze vyrovnávací paměti vstupního datového proudu, ke které přistupuje prostřednictvím objektu, který ukládá, ukazatele typu na 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&>

Parametry

CharType
Typ, který představuje typ znaku pro istreambuf_iterator.

Rysy
Typ, který představuje typ znaku pro istreambuf_iterator. Tento argument je nepovinný a výchozí hodnota je char_traits<CharType.>

Poznámky

Třída istreambuf_iterator musí splňovat požadavky na vstupní iterátor.

Po vytvoření nebo zvýšení objektu třídy istreambuf_iterator s nenulovým uloženým ukazatelem se objekt efektivně pokusí extrahovat a uložit objekt typu CharType z přidruženého vstupního datového proudu. Extrakce však může být zpožděna, dokud se objekt nezkopíruje nebo nezkopíruje. Pokud se extrakce nezdaří, objekt nahradí uložený ukazatel ukazatelem s hodnotou null a vytvoří tak indikátor ukončení sekvence.

Konstruktory

Konstruktor Popis
istreambuf_iterator Vytvoří inicializovaný objekt istreambuf_iterator pro čtení znaků ze vstupního datového proudu.

Typedefs

Název typu Popis
char_type Typ, který poskytuje typ znaku ostreambuf_iterator.
int_type Typ, který poskytuje celočíselnou hodnotu pro typ istreambuf_iterator.
istream_type Typ, který poskytuje typ datového istream_iteratorproudu .
streambuf_type Typ, který poskytuje typ datového istreambuf_iteratorproudu .
traits_type Typ, který poskytuje typ znakových istream_iteratorvlastností .

Členské funkce

Členová funkce Popis
rovný Ověřuje rovnost mezi dvěma iterátory vyrovnávací paměti vstupního toku.

Operátory

Operátor Popis
operátor* Dereferenční operátor vrátí následující znak v toku.
operator++ Vrátí buď následující znak ze vstupního toku, nebo zkopíruje objekt před jeho zvýšením a vrátí kopii.

Požadavky

Header:<iterator>

Obor názvů: std

istreambuf_iterator::char_type

Typ, který poskytuje typ znaku ostreambuf_iterator.

typedef CharType char_type;

Poznámky

Typ je synonymem parametru šablony CharType.

Příklad

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

Testuje ekvivalenci mezi dvěma iterátory vyrovnávací paměti vstupního datového proudu.

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

Parametry

Vpravo
Iterátor, pro který chcete zkontrolovat rovnost.

Návratová hodnota

true pokud jsou oba istreambuf_iteratoriterátory koncového proudu nebo pokud ani jeden z nich není iterátorem koncového proudu; jinak false.

Poznámky

Rozsah je definován na istreambuf_iterator aktuální pozici a iterátoru koncového proudu, ale vzhledem k tomu, že všechny iterátory datových proudů jsou v rámci členské funkce ekvivalentní equal , není možné definovat žádné dílčí uspořádání pomocí s istreambuf_iterator. Operátory == mají != stejnou sémantiku.

Příklad

// 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, který poskytuje celočíselnou hodnotu pro typ istreambuf_iterator.

typedef typename traits_type::int_type int_type;

Poznámky

Typ je synonymem pro Traits::int_type.

Příklad

// 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, který poskytuje typ datového istreambuf_iteratorproudu .

typedef basic_istream<CharType, Traits> istream_type;

Poznámky

Typ je synonymem pro basic_istream<CharType, Traits.>

Příklad

Příklad deklarace a použití istream_typenajdete v istreambuf_iterator .

istreambuf_iterator::istreambuf_iterator

Vytvoří istreambuf_iterator, který je inicializován pro čtení znaků ze vstupního datového proudu.

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

Parametry

strbuf
Vyrovnávací paměť vstupního datového istreambuf_iterator proudu, ke které se připojuje.

_Istr
Vstupní datový proud, ke kterému istreambuf_iterator se připojuje.

Poznámky

První konstruktor inicializuje vstupní ukazatel vyrovnávací paměti datového proudu pomocí strbuf. Druhý konstruktor inicializuje ukazatel vstupní vyrovnávací paměti datového proudu s _Istr. rdbufa pak se nakonec pokusí extrahovat a uložit objekt typu CharType.

Příklad

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

Dereferenční operátor vrátí následující znak v toku.

CharType operator*() const;

Návratová hodnota

Další znak v datovém proudu.

Příklad

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

Vrátí buď následující znak ze vstupního toku, nebo zkopíruje objekt před jeho zvýšením a vrátí kopii.

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

Návratová hodnota

Odkaz istreambuf_iterator nebo odkaz na objekt .istreambuf_iterator

Poznámky

První operátor se nakonec pokusí extrahovat a uložit objekt typu CharType z přidruženého vstupního datového proudu. Druhý operátor vytvoří kopii objektu, zvýší objekt a vrátí kopii.

Příklad

// 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, který poskytuje typ datového proudu istreambuf_iterator.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Poznámky

Typ je synonymem pro basic_streambuf<CharType, Traits.>

Příklad

Příklad deklarace a použití istreambuf_typenajdete v istreambuf_iterator .

istreambuf_iterator::traits_type

Typ, který poskytuje typ znakových istream_iteratorvlastností .

typedef Traits traits_type;

Poznámky

Typ je synonymem parametru šablony Traits.

Příklad

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

Viz také

iterator – struktura
<iterátor>
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace