На этом шаге мы рассмотрим итераторы потоковых буферов вывода.
Вывод строки в потоковый буфер с использованием итератора 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 перечислены все операции итераторов потоковых буферов вывода.
| Выражение | Описание |
|---|---|
| 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. В этом случае любые попытки записи оператором = ни к чему не приводят.
На следующем шаге мы рассмотрим итераторы потоковых буферов вывода.