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