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

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

    Вывод строки в потоковый буфер с использованием итератора ostreambuf_iterator выполняется так:

// Создание итератора для буфера или выходного потока 
cout std::ostreambuf_iterator<char> bufWriter(std::cout);
std::string hello("Hello, world\n"); 
std::copy(hello.begin(), hello.end(), bufWriter);

    В первой строке этого фрагмента конструируется итератор вывода типа ostreambuf_iterator для объекта cout. Вместо передачи выходного потока данных можно сразу передать указатель на потоковый буфер. Остальные команды конструируют объект string и копируют символы этого объекта через сконструированный итератор вывода.

    В таблице 1 перечислены все операции итераторов потоковых буферов вывода.

Таблица 1. Операции итераторов потоковых буферов вывода
Выражение Описание
ostreambuf_iterator<char>(ostream) Создание итератора потокового буфера вывода для потока ostream
ostreambuf_iterator<char>(buffer_ptr) Создание итератора потокового буфера вывода для буфера, на который ссылается указатель buffer_ptr
*iter Фиктивная операция (возвращает iter)
iter = с Записывает символ с в буфер вызовом функции sputc(c)
++iter Фиктивная операция (возвращает iter)
iter++ Фиктивная операция (возвращает iter)
failed() Проверка возможности дальнейшей записи через итератор потокового буфера вывода

    Этот интерфейс имеет много общего с потоковыми итераторами вывода (смотри 230 шаг). Кроме того, итератор можно инициализировать буфером, а также проверить возможность записи через итератор функцией failed(). Если предыдущий вывод символов завершился неудачей, failed() возвращает true. В этом случае любые попытки записи оператором = ни к чему не приводят.

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




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