Sdílet prostřednictvím


istream_iterator – třída

Popisuje objekt vstupního iterátoru. Extrahuje objekty třídy Type ze vstupního datového proudu, který přistupuje prostřednictvím objektu, který ukládá, typu pointer do basic_istreamCharType<, . Traits>

Syntaxe

template <class Type, class CharType = char, class Traits = char_traits<CharType>, class Distance = ptrdiff_t>
class istream_iterator
: public iterator<
    input_iterator_tag, Type, Distance,
    const Type *,
    const Type&>;

Parametry

Typ
Typ objektu, který má být extrahován ze vstupního datového proudu.

CharType
Typ, který představuje typ znaku istream_iteratorpro znak . Tento argument je nepovinný a výchozí hodnota je char.

Rysy
Typ, který představuje typ znaku istream_iteratorpro znak . Tento argument je nepovinný a výchozí hodnota je char_traitsCharType<>.

Vzdálenost
Celočíselný typ se signedm, který představuje typ rozdílu istream_iteratorpro . Tento argument je nepovinný a výchozí hodnota je ptrdiff_t.

Po vytvoření nebo zvýšení objektu třídy istream_iterator s nenulálním uloženým ukazatelem se objekt pokusí extrahovat a uložit objekt typu Type z přidruženého vstupního datového proudu. Pokud se extrakce nezdaří, objekt nahradí uložený ukazatel ukazatelem s hodnotou null a vytvoří tak indikátor ukončení sekvence.

Konstruktory

Konstruktor Popis
istream_iterator Vytvoří buď iterátor typu end-of-stream jako výchozí istream_iterator , nebo istream_iterator inicializovaný na typ datového proudu iterátoru, ze kterého čte.

Typedefs

Název typu Popis
char_type Typ, který poskytuje typ znaku istream_iterator.
istream_type Typ, který poskytuje typ datového istream_iteratorproudu .
traits_type Typ, který poskytuje typ znakových istream_iteratorvlastností .

Operátory

Operátor Popis
operátor* Operátor dereferencing vrátí uložený objekt typu Type adresovaný objektem istream_iterator.
operátor-> Vrátí hodnotu členu, pokud existuje.
operator++ Buď zkopíruje zvýšený objekt ze vstupního datového proudu, nebo zkopíruje objekt před jeho zvýšením a vrátí kopii.

Požadavky

Header:<iterator>

Obor názvů: std

istream_iterator::char_type

Typ, který poskytuje typ znaku istream_iterator.

typedef CharType char_type;

Poznámky

Typ je synonymem pro parametr Chartypešablony .

Příklad

// istream_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '2 4 f' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::istream_iterator

Vytvoří buď iterátor typu end-of-stream jako výchozí istream_iterator , nebo istream_iterator inicializovaný na typ datového proudu iterátoru, ze kterého čte.

istream_iterator();

istream_iterator(istream_type& _Istr);

Parametry

_Istr
Vstupní datový proud, který se má číst, slouží k inicializaci istream_iterator.

Poznámky

První konstruktor inicializuje ukazatel vstupního datového proudu s nulovým ukazatelem a vytvoří iterátor koncového proudu. Druhý konstruktor inicializuje ukazatel vstupního datového proudu pomocí &_Istr a pak se pokusí extrahovat a uložit objekt typu Type.

Iterátor koncového proudu lze použít k otestování, jestli istream_iterator dosáhl konce datového proudu.

Příklad

// istream_iterator_istream_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   // Used in conjunction with copy algorithm
   // to put elements into a vector read from cin
   vector<int> vec ( 4 );
   vector <int>::iterator Iter;

   cout << "Enter 4 integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";
   istream_iterator<int> intvecRead ( cin );

   // Default constructor will test equal to end of stream
   // for delimiting source range of vecor
   copy ( intvecRead , istream_iterator<int>( ) , vec.begin ( ) );
   cin.clear ( );

   cout << "vec = ";
   for ( Iter = vec.begin( ) ; Iter != vec.end( ) ; Iter++ )
      cout << *Iter << " "; cout << endl;
}

istream_iterator::istream_type

Typ, který poskytuje typ datového istream_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 istream_iterator.

istream_iterator::operator*

Operátor dereferencing vrátí uložený objekt typu Type adresovaný objektem istream_iterator.

const Type& operator*() const;

Návratová hodnota

Uložený objekt typu Type.

Příklad

// istream_iterator_operator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator->

Vrátí hodnotu členu, pokud existuje.

const Type* operator->() const;

Návratová hodnota

Hodnota člena, pokud existuje.

Poznámky

i->m je ekvivalentní (*i).m

Operátor vrátí &*this.

Příklad

// istream_iterator_operator_vm.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
#include <complex>

using namespace std;

int main( )
{
   cout << "Enter complex numbers separated by spaces & then\n"
        << " a character pair ( try example: '(1,2) (3,4) (a,b)' ): ";

   // istream_iterator from stream cin
   istream_iterator< complex<double> > intRead ( cin );

   // End-of-stream iterator
   istream_iterator<complex<double> > EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading the real part: " << intRead ->real( ) << endl;
      cout << "Reading the imaginary part: " << intRead ->imag( ) << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator++

Buď zkopíruje zvýšený objekt ze vstupního datového proudu, nebo zkopíruje objekt před jeho zvýšením a vrátí kopii.

istream_iterator<Type, CharType, Traits, Distance>& operator++();

istream_iterator<Type, CharType, Traits, Distance> operator++(int);

Návratová hodnota

První člen operátor vrátí odkaz na přírůstkový objekt typu Type extrahovaný ze vstupního datového proudu a druhá členová funkce vrátí kopii objektu.

Příklad

// istream_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_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

// istream_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '10 20 a' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

Viz také

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