istream_iterator — Klasa

Opisuje obiekt iteratora wejściowego. Wyodrębnia obiekty klasy Type ze strumienia wejściowego, do którego uzyskuje dostęp za pośrednictwem obiektu, który przechowuje, typu pointer do basic_istreamCharType<, . Traits>

Składnia

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

Type
Typ obiektu, który ma zostać wyodrębniony ze strumienia wejściowego.

Chartype
Typ reprezentujący typ znaku dla elementu istream_iterator. Ten argument jest opcjonalny, a wartość domyślna to char.

Cechy
Typ reprezentujący typ znaku dla elementu istream_iterator. Ten argument jest opcjonalny, a wartość domyślna to char_traitsCharType<>.

Odległość
Typ całkowitolicztowy ze znakiem reprezentujący typ różnicy dla elementu istream_iterator. Ten argument jest opcjonalny, a wartość domyślna to ptrdiff_t.

Po utworzeniu lub inkrementacji obiektu klasy istream_iterator ze wskaźnikiem przechowywanym nonnull obiekt próbuje wyodrębnić i zapisać obiekt typu Type ze skojarzonego strumienia wejściowego. 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
istream_iterator Tworzy iterator końca strumienia jako domyślny istream_iterator lub istream_iterator zainicjowany do typu strumienia iteratora, z którego odczytuje.

Typedefs

Nazwa typu opis
Char_type Typ, który zapewnia typ znaku .istream_iterator
istream_type Typ, który zapewnia typ strumienia klasy istream_iterator.
traits_type Typ, który zapewnia typ cech znaków klasy istream_iterator.

Operatory

Operator opis
Operator* Operator dereferencing zwraca przechowywany obiekt typu Type adresowany przez istream_iteratorobiekt .
Operator-> Zwraca wartość elementu członkowskiego, jeśli istnieje.
operator++ Albo wyodrębnia inkrementowany obiekt ze strumienia wejściowego, albo kopiuje obiekt przed jego inkrementacją i zwraca kopię.

Wymagania

Nagłówek:<iterator>

Przestrzeń nazw: std

istream_iterator::char_type

Typ, który zapewnia typ znaku .istream_iterator

typedef CharType char_type;

Uwagi

Typ jest synonimem parametru Chartypeszablonu .

Przykład

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

Tworzy iterator końca strumienia jako domyślny istream_iterator lub istream_iterator zainicjowany do typu strumienia iteratora, z którego odczytuje.

istream_iterator();

istream_iterator(istream_type& _Istr);

Parametry

_Istr
Strumień wejściowy do odczytu służy do inicjowania elementu istream_iterator.

Uwagi

Pierwszy konstruktor inicjuje wskaźnik strumienia wejściowego za pomocą wskaźnika o wartości null i tworzy iterator końca strumienia. Drugi konstruktor inicjuje wskaźnik strumienia wejściowego za pomocą polecenia &_Istr, a następnie próbuje wyodrębnić i zapisać obiekt typu Type.

Iterator końca strumienia może służyć do testowania, czy obiekt istream_iterator osiągnął koniec strumienia.

Przykład

// 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, który zapewnia typ strumienia klasy istream_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Uwagi

Typ jest synonimem CharTypebasic_istream<, Traits.>

Przykład

Zobacz istream_iterator , aby zapoznać się z przykładem sposobu deklarowania i używania elementu istream_type.

istream_iterator::operator*

Operator dereferencing zwraca przechowywany obiekt typu Type adresowany przez istream_iteratorobiekt .

const Type& operator*() const;

Wartość zwracana

Przechowywany obiekt typu Type.

Przykład

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

Zwraca wartość elementu członkowskiego, jeśli istnieje.

const Type* operator->() const;

Wartość zwracana

Wartość elementu członkowskiego, jeśli istnieje.

Uwagi

i->m jest odpowiednikiem (*i).m

Operator zwraca wartość &*this.

Przykład

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

Albo wyodrębnia inkrementowany obiekt ze strumienia wejściowego, albo kopiuje obiekt przed jego inkrementacją i zwraca kopię.

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

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

Wartość zwracana

Pierwszy operator elementu członkowskiego zwraca odwołanie do przyrostowego obiektu typu Type wyodrębnionego ze strumienia wejściowego, a druga funkcja składowa zwraca kopię obiektu.

Przykład

// 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, który zapewnia typ cech znaków klasy istream_iterator.

typedef Traits traits_type;

Uwagi

Typ jest synonimem cech parametru szablonu.

Przykład

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

Zobacz też

input_iterator_tag, struktura
iterator, struktura
<Sterująca>
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++