Явная установка флагов форматирования и использование методов не слишком удобны для форматирования потока. Поэтому в библиотеке реализован набор операций для манипулирования состоянием потока данных непосредственно во время операции ввода-вывода, которые так и называются манипуляторами. В библиотеке <ios> определены манипуляторы (см. п. п. 27.4.5 в [1]), соответствующие флагам форматирования (табл. 14.3). Эти манипуляторы не имеют аргументов, и их названия совпадают с именами флагов — фактически они тоже устанавливают и сбрасывают одноименные флаги.
Таблица 14.3. Манипуляторы, соответствующие флагам форматирования
Манипулятор Эквивалентный вызов метода
left stream.setf(std::ios::left, std::ios::adjustfield);
right stream.setf(std::ios::right, std::ios::adjustfield);
internal stream.setf(std::ios::internal, std::ios::adjustfield);
dec stream.setf(std::ios::dec, std::ios::basefield);
hex stream.setf(std::ios::hex, std::ios::basefield);
oct stream.setf(std::ios::oct, std::ios::basefield);
fixed stream.setf(std::ios::fixed, std::ios::floatfield);
scientific stream.setf(std::ios::scientific, std::ios::floatfield);
boolalpha stream.setf(std::ios::boolalpha);
noboolalpha stream.unsetf(std::ios::boolalpha);
showbase stream.setf(std::ios::showbase);
noshowbase stream.unsetf(std::ios::showbase);
showpoint stream.setf(std::ios::showpoint);
noshowpoint stream.unsetf(std::ios::showpoint);
showpos stream.setf(std::ios::showpos);
Манипулятор Эквивалентный вызов метода
noshowpos stream.unsetf(std::ios::showpos);
skipws stream.setf(std::ios::skipws);
noskipws stream.unsetf(std::ios::skipws);
unitbuf stream.setf(std::ios::unitbuf);
nounitbuf stream.unsetf(std::ios::unitbuO;
uppercase stream.setf(std::ios::uppercase);
nouppercase stream.unsetf(std::ios::uppercase);
Одиночным флагам соответствует по два манипулятора: один — установленному флагу, другой (с префиксом «по») — сброшенному. Флагам, объединенным в группы, соответствует по одному манипулятору.
В заголовке <i stream> определен манипулятор ввода ws (см. п. п. 27.6.1.4 в [1]) — ввод с игнорированием пропусков, в заголовке <ostream> — манипуляторы вывода endl, ends, flush (см. п. п. 27.6.2.7 в [1]). Манипулятор flush принудительно выводит выходной буфер на устройство. Манипулятор endl мы уже неоднократно применяли. Его действие состоит в записи символа ' \n' в выходной поток, после чего выходной буфер принудительно выводится на устройство. Манипулятор ends записывает символ '\0' (символ завершения строки) в поток.
В заголовке <iomanip> определены щесть манипуляторов с аргументами (см. п. п. 27.6.3 в [1]); пять из них представлены в табл. 14.4. Чтобы их использовать, нужно задать в программе оператор
#include <iomanip>
|