| next C++ |
| Ссылки |
| Улучшения языка C |
| Классы |
| Перегрузка функций и операций |
| Шаблоны |
| Наследование |
| Исключительные ситуации |
| Лабораторные работы |
| Курсовая работа |
| Вопросы к экзамену |
STL
Поточные классы| Метод | Назначение |
| Управление форматированием | |
| setf(flag) | установка негрупповых флагов форматирования |
| setf(flag,group) | установка флага из группы |
| unsetf(flag) | сброс негрупповых флагов |
| fmtflags flags() | текущие флаги |
| width(int) | установка минимальной ширины поля, после вывода значения ширина поля сбрасывается на 0 |
| int width() | текущая ширина поля |
| precision(int) | установка максимального количества десятичных знаков для вывода вещественных чисел по умолчанию – 6 |
| int precision() | текущая точность |
| fill(char) | установка символа заполнения по умолчанию – ' ' |
| int fill() | текущий символ заполнения |
| Проверка и установка состояния | |
| bool good() | true, если ошибок не было |
| bool eof() | true, если при выполнении последнего ввода был обнаружен конец файла |
| bool fail() | true, если при выполнении последнего ввода была ошибка ввода-вывода |
| clear() | очистить состояние ошибки для продолжения ввода |
| clear(ios::failbit) | установить состояние ошибки |
| Посимвольный ввод-вывод | |
| put(char) | вывод символа |
| write(char* buf, int n) | вывод n символов |
| flush() | записать информацию из буфера на диск |
| get(char&) int get() | ввод символа |
| read(char* buf, int n) | ввод n символов |
| int peek() | подсмотреть следующий символ, для конца файла возвращается EOF |
| putback(char) | вернуть символ в поток |
| Позиционирование в файле | |
| pos_type tellg() | получить текущую позицию чтения |
| seekg(pos_type) seekg(off_type,seek_dir) | установить позицию чтения |
| pos_type tellp() | получить текущую позицию записи |
| seekp(pos_type) seekp(off_type,seek_dir) | установить позицию записи |
| Открытие и закрытие файлов (классы ifstream, ofstream, fstream) | |
| open(char *name) open(char *name, mode) | открыть файл, где mode комбинируется из флагов in, out, app, ate, trunc, binary |
| close() | закрыть файл |
| Флаг | Значение |
| Группа basefield – система счисления для целых чисел | |
| dec | десятичная |
| oct | восьмеричная |
| hex | шестнадцатеричная |
| Группа floatfield – формат представления для вещественных чисел | |
| fixed | с фиксированной точкой |
| scientific | в экспоненциальной форме |
| Группа adjustfield – выравнивание в поле вывода | |
| right | вправо |
| left | влево |
| internal | знак числа – слева, значение – справа |
| Без группы | |
| showbase | выводить 0x перед шестнадцатеричными и 0 перед восьмеричными числами |
| showpoint | всегда выводить . и дробную часть |
| uppercase | выводить шестнадцатеричные цифры и E в вещественных числах в верхнем регистре |
| showpos | выводить знак числа для положительных чисел |
| boolalpha | выводить значения bool как true и false |
| skipws | игнорирование пробелов при вводе символов с помощью операции >> |
// вывод целого числа в шестнадцатеричном виде с ведущими нулями int x=123; cout.setf(ios::hex,ios::basefield); cout.setf(ios::uppercase); cout.width(8); cout.fill('0'); cout<<x<<"\n"; cout.fill(' '); // вывод вещественного числа в поле шириной 10 с 2 десятичными знаками double f=12.3; cout.setf(ios::fixed,ios::floatfield); cout.setf(ios::showpoint); cout.width(10); cout.precision(2); cout<<f<<"\n";
// вывод целого числа в шестнадцатеричном виде с ведущими нулями int x=123; printf("%08X\n",x); // вывод вещественного числа в поле шириной 10 с 2 десятичными знаками double f=12.3; printf("%10.2lf\n",f);
| Манипулятор | Назначение |
| setw(w) | установка ширины поля вывода |
| setprecision(p) | установка количества десятичных знаков для вывода вещественных чисел |
| setfill(c) | установка символа заполнения |
| flush | записать информацию из буфера на диск |
| endl | вывести переход на новую строку, а затем выполнить flush |
| dec oct hex | выбор системы счисления для целых чисел |
| right left internal | выравнивание в поле вывода |
| fixed scientific | формат представления для вещественных чисел |
| showbase noshowbase showpoint noshowpoint showpos noshowpos … | установка и сброс соответствующих флагов форматирования |
// вывод целого числа в шестнадцатеричном виде с ведущими нулями int x=123; cout<<hex<<uppercase<<setw(8)<<setfill('0')<<x<<setfill(' ')<<"\n"; // вывод вещественного числа в поле шириной 10 с 2 десятичными знаками double f=12.3; cout<<fixed<<showpoint<<setw(10)<<setprecision(2)<<f<<"\n";
// вывод целого числа в шестнадцатеричном виде с ведущими нулями int x=123; cout<<format("{:08X}\n",x); // вывод вещественного числа в поле шириной 10 с 2 десятичными знаками double f=12.3; cout<<format("{:10.2f}\n",f);
println("x={} f={:10.2f}",x,f); // эквивалентно cout<<format("x={} f={:10.2f}",x,f)<<"\n";
vector<int> v{10,1,127};
set<int> s{10,1,127};
map<int,string> m{{10,"abc"},{1,"a"}};
pair<int,int> p{2,5};
// по умолчанию vector в [], set и map в {}, pair и tuple в ()
println("{} {} {} {}",v,s,m,p); // [10, 1, 127] {1, 10, 127} {1: "a", 10: "abc"} (2, 5)
// печать без скобок, формат для элементов
println("{:n:X}",v); // A, 1, 7F
// печать pair как в map через :
println("{:m}",p); // 2: 5
template<typename T>
struct std::formatter<std::vector<T>> : std::range_formatter<T, char> {
constexpr formatter() { set_separator(" "); }
};
int main() {
vector<int> a{10,1,127};
println("{:n:}", a); // 10 1 127
}