Класс istream_iterator

Описывает объект итератора ввода. Он извлекает объекты класса Type из входного потока, к которому он обращается через объект, в котором он хранится, типа<basic_istreamCharTypepointer , . Traits>

Синтаксис

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&>;

Параметры

Тип
Тип объекта, который необходимо извлечь из потока ввода.

Chartype
Тип, представляющий шрифт символа для istream_iterator. Этот аргумент является необязательным, и значением по умолчанию является char.

Признаки
Тип, представляющий шрифт символа для istream_iterator. Этот аргумент является необязательным, и значением по умолчанию является char_traits<CharType>.

Расстояние
Тип целого числа со знаком, представляющий тип отличия для istream_iterator. Этот аргумент является необязательным, и значением по умолчанию является ptrdiff_t.

После создания или увеличения объекта класса istream_iterator с помощью сохраненного указателя, не содержащего null, объект фактически пытается извлечь и сохранить объект типа Type из соответствующего входного потока. Если извлечение завершается ошибкой, этот объект фактически заменяет сохраненный указатель указателем null, тем самым создавая индикатор конца последовательности.

Конструкторы

Конструктор Description
istream_iterator Создает итератор конца потока в качестве итератора istream_iterator по умолчанию или итератор istream_iterator, инициализированный в тип потока итератора, из которого он считывается.

Определения типов

Введите имя Description
char_type Тип, обеспечивающий тип символа для istream_iterator.
istream_type Тип, обеспечивающий тип потока для istream_iterator.
traits_type Тип, обеспечивающий тип признаков символа для istream_iterator.

Операторы

Operator Description
operator* Оператор удаления ссылки возвращает сохраненный объект типа Type, к которому обращается istream_iterator.
operator-> Возвращает значение члена при наличии.
оператор++ Либо извлекает увеличенный объект из входного потока, либо копирует объект перед его увеличением и возвращает копию.

Requirements

Заголовок:<итератор>

Пространство имен: std

istream_iterator::char_type

Тип, обеспечивающий тип символа для istream_iterator.

typedef CharType char_type;

Замечания

Этот тип является синонимом для параметра шаблона Chartype.

Пример

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

Создает итератор конца потока в качестве итератора istream_iterator по умолчанию или итератор istream_iterator, инициализированный в тип потока итератора, из которого он считывается.

istream_iterator();

istream_iterator(istream_type& _Istr);

Параметры

_Istr
Входной поток для чтения, используется для инициализации istream_iterator.

Замечания

Первый конструктор инициализирует указатель входного потока значением null и создает итератор конца потока. Второй конструктор инициализирует указатель входного потока с помощью &_Istr, а затем пытается извлечь и сохранить объект типа Type.

Итератор конца потока можно использовать для проверки того, достиг ли istream_iterator конец потока.

Пример

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

Тип, обеспечивающий тип потока для istream_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Замечания

Тип является синонимом basic_istream<CharType, Traits.>

Пример

См. раздел istream_iterator с примером объявления и использования istream_type.

istream_iterator::operator*

Оператор удаления ссылки возвращает сохраненный объект типа Type, к которому обращается istream_iterator.

const Type& operator*() const;

Возвращаемое значение

Хранимый объект типа Type.

Пример

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

Возвращает значение члена при наличии.

const Type* operator->() const;

Возвращаемое значение

Возвращает значение члена при его наличии.

Замечания

i->m — это эквивалент (*i).m

Оператор возвращает &*this.

Пример

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

Либо извлекает увеличенный объект из входного потока, либо копирует объект перед его увеличением и возвращает копию.

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

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

Возвращаемое значение

Первый оператор-член возвращает ссылку на добавочный объект типа Type , извлеченный из входного потока, а вторая функция-член возвращает копию объекта.

Пример

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

Тип, обеспечивающий тип признаков символа для istream_iterator.

typedef Traits traits_type;

Замечания

Этот тип является синонимом для параметра-шаблона Traits.

Пример

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

См. также

Структура input_iterator_tag
Структура iterator
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++