Класс istream_iterator
Описывает объект итератора ввода. Он извлекает объекты класса Type
из входного потока, к которому он обращается через объект, в котором он хранится, типа<basic_istream
CharType
pointer
, . 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-> | Возвращает значение члена при наличии. |
оператор++ | Либо извлекает увеличенный объект из входного потока, либо копирует объект перед его увеличением и возвращает копию. |
Требования
Заголовок:<итератор>
Пространство имен: 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++