Форматирование данных при вводе - выводе в поток. Флаги и манипуляторы

Флаги представляют собой отдельные биты, объединенные в поле x­_flags типа long класса ios.

флаги:

skipws - игнорирование пробелов

left – выравнивание по левому краю

right – выравнивание по правому краю

dec – десятичная система счисления

oct – восьмеричная система счисления

hex – шестнадцатеричная система счисления

scientific – число в форме с мантиссой

fixed – фиксированная точка

Методы:

width – ширина поля вывода

precision – точность вещественного числа

fill –текущий символ заполнения

long a=1000, b=077;

cout.setf(ios::hex | ios::showbase | ios::uppercase);

cout.fill(‘.’);

cout.width(10); cout<<a<<endl;

cout.width(10); cout<<b<<endl;

double d=0.12, c=1.3e-4;

cout.setf(ios::left);

cout.width(10); cout<<d<<endl;

cout.width(10); cout<<c:

Манипуляторы – функции, которые можно включать в цепочку операций помещения в поток и извлечения из потока для форматирования данных:

- простые

dec – десятичная система счисления

oct – восьмеричная система счисления

hex –шестнадцатеричная система счисления

ws – извлекает пробелы

endl – новая строка

ends – нулевой символ

flush – выгрузка буфера

- параметризованные

setfill(int) – символ-заполнитель

setprecision(int) – точность вывода вещественного числа

setw(int) – ширина поля вывода

Состояние потока:

enum io_state

{goodbit=0x00 //нет ошибок

eofbit=0x01 //конец файла

failbit=0x02 //ошибки форматирования

budbit=0x04 //серьезная ошибка

hardfail=0x08}; //неисправность оборудования

int rdstate() – возвращает текущее состояние потока

int eof() – возвращает ненулевое значение, если установлен флаг eofbit

int fail() – возвращает ненулевое значение, если установлен один из флагов failbit, badbit или hardfail

int bad() – возвращает ненулевое значение, если установлен один из флагов badbit или hardfail

int good() – возвращает ненулевое значение, если сброшены все флаги ошибок

operator void*() – возвращает нулевой указатель, если установлен хотя бы 1 бит ошибки

operator !() – возвращает ненулевой указатель, если установлен хотя бы 1 бит ошибки

36)Файловые потоки в стандартной библиотеке С++. Ввод-вывод типов, определенных пользователем.

классы для работы с файлами:

ifstream - входные

ofstream - выходные

fstream- двунаправленные

Использование потока:

- создание

- открытие и связывание с файлом

- обмен

- закрытие файла

- уничтожение

Создание потоков:

- конструкторы без параметра создают объект соответствующего класса, не связывая его с файлом

- конструкторы с параметрами создают объект соответствующего класса, открывают файл с указанным именем и связывают файл с объектом

Режимы открытия файла:

enum open_mode {

in =0x01 //чтение

out =0x02 // запись

ate =0x04 // указатель на конец файла

app =0x08 // добавление в конец

trunc =0x10 // удалить, если существует

nocreate =0x20 // ошибка, если не существует

noreplace =0x40 // ошибка, если файл существует

binary =0x80}; // двоичный режим

Ввод-вывод типов, определяемых пользователем:

операция ввода-вывода в поток – бинарная операция, левый операнд которой – объект-поток, а правый – объект, который требуется извлечь или поместить в этот поток.

возвращаемое значение – ссылка ан поток, чтобы можно было организовать цепочки операций.

37)Строковый класс стандартной библиотеки С++. Контейнерные классы. Типы контейнеров.

Строковый класс string:

#include <iostream>

#include <string.h>

using namespace std;

void function()

{char s1[80], s2[80], s3[80];

strcpy(s1, “old string”); //присваивание строк

strcpy(s2, s1);

strcat(s3, s1); //конкатенация (слияние)

strcat(s3, s2); строк

if (strcmp(s2, s3)<0) cout<<s2; //сравнение

else cout<<s3; строк

}

void function2()

{string s1, s2, s3;

s1=”new string”; //присваивание

s2=s1;

s3=s1+s2; //конкатенация

if (s2<s3) cout<<s2; //сравнение

else cout<<s3;

}

Конструкторы:

string()

string(const char *)

string(const char *, int n)

string(string&)

Присваивание строк:

string& operator=(const string& str)

string& operator=(const char& s)

string& operator=(char c)

Операции:

= присваивание > больше

+ конкатенация >= больше или равно

== равенство [ ] индексация

!= неравенство << вывод

< меньше >> ввод

<= меньше или равно += добавление

Функции:

insert вставляет в одну строку часть другой

erase удаляет часть строки

clear очистка всей строки

replace замена части строки

find группы функций для поиска подстрок

compare сравнение частей строк

size length количество символов

capacity объем памяти занимаемый строкой

empty возвращает истину, если строка пуста

Контейнерные классы – классы, предназначенные для хранения данных, организованных определенным образом.

Контейнеры: последовательные (обеспечивают хранение конечного количества однотипных величин в виде непрерывной последовательности) и ассоциативные (обеспечивают быстрый доступ к данным по ключу)

Типы последовательных контейнеров:

- векторы (vector) – динамическая структура, реализующая произвольный доступ к элементам, добавление в конец и удаление из конца

- двусторонние очереди (deque) – реализует произвольный доступ к элементам, добавление в оба конца и удаление из обоих концов

- списки (list) – реализует вставку и удаление элементов в произвольное место, но не имеет произвольного доступа к своим элементам

адаптеры – стеки (stack), очереди (queue), очереди с приоритетами (priority_queue).

Общие методы последовательных контейнеров:

push_front - вставка в начало

pop_front – удаление из начала

push_back – вставка в конец

pop_back - удаление из конца

insert – вставка в произвольное место

erase – удаление из произвольного места

[], at – произвольный доступ к элементам

Типы ассоциативных контейнеров:

- словари (map)

- словари с дубликатами (multimap)

- множества (set)

- множества с дубликатами (multiset)

- битовые множества (bitset)

Класс ассоциативных контейнеров построен на основе пар значений, первое из которых представляет собой ключ для идентификации элемента, а второе - собственно элемент. Для хранения пары «шаблон-элемент» используется шаблон pair

Типы объявленные в контейнерных классах

value_type - тип элемента контейнера

size_type - тип индексов, счетчиков элементов

iterator - итератор

reverse_iterator - обратный итератор

reference - ссылка на элемент

для ассоциативных контейнеров:

key_type – тип ключа

Итератор – аналог указателя на элемент

используется для последовательного перебора элементов контейнера в прямом или обратном направлении

Функции итератора:

iterator begin() – указывает на первый элемент

iterator end() – указывает на элемент, следующий за последним

reverse_iterator rbegin() – указывает на первый элемент в обратном порядке

reverse_iterator rend() – указывает на элемент, следующий за последним, в обратном порядке

Дополнительные методы контейнера:

size() – число элементов

max_size() – максимальный размер контейнера

empty() – Булевская функция, показывающая пуст ил контейнер