Шаг 514.
Библиотека STL. Ввод-вывод с использованием потоковых классов. Классы потоковых буферов. Итераторы потоковых буферов ввода

    На этом шаге мы рассмотрим итераторы потоковых буферов ввода.

    В таблице 1 перечислены все операции итераторов потоковых буферов ввода. Этот интерфейс имеет много общего с потоковыми итераторами ввода (смотри 231 шаг). Кроме того, итератор можно инициализировать буфером, а также проверить равенство двух итераторов потоковых буферов ввода функцией equal(). Два итератора потоковых буферов ввода равны, если они оба установлены в конец потока данных или ни один из них не установлен в конец потока данных.

Таблица 1. Операции итераторов потоковых буферов ввода
Выражение Описание
istreambuf_iterator<char>() Создает итератор конца потока
istreambuf_iterator<char>(istream) Создает итератор потокового буфера ввода для потока istream, возможно, с чтением первого символа функцией sgetc()
istreambuf_iterator<char>(buffer_ptr) Создает итератор потокового буфера ввода для буфера, на который ссылается указатель buffer_ptr, возможно, с чтением первого символа функцией sgetc()
*iter Возвращает текущий символ, ранее прочитанный функцией sgetc() (читает первый символ, если он не был прочитан конструктором)
++iter Читает следующий символ функцией sbumpc() и возвращает его позицию
iter++ Читает следующий символ функцией sbumpc(), но возвращает итератор для предыдущего символа
iter1.equal(iter2) Проверяет равенство двух итераторов
iter1==iter2 Проверка на равенство iter1 и iter2
iter1!=iter2 Проверка на неравенство iter1 и iter2

    Из этого следует несколько неочевидная формулировка эквивалентности объектов типа istreambuf_iterator. Два объекта типа istreambuf_iterator считаются эквивалентными, если оба итератора установлены в конец потока данных или ни один из них не установлен в конец потока данных (совпадают ли при этом буферы - значения не имеет). В частности, итератор, установленный в конец потока данных, может быть получен при конструировании итератора конструктором по умолчанию. Кроме того, итератор istreambuf_iterator устанавливается в конец потока данных при попытке вывести итератор за конец потока (то есть когда sbumpc() возвращает traits_type::eof). У такого поведения имеются два важных следствия.

    На следующем шаге мы рассмотрим пример использования итераторов потоковых буферов.




Предыдущий шаг Содержание Следующий шаг