Потоки – последовательности байт, связанные с файлом либо с устройством ввода / вывода.
Потоки по направлению обмена делятся на входные, выходные и двунаправленные.
По виду устройств, с которыми работает поток выделяют стандартные (передача от клавиатуры и на экран), файловые и строковые (работа с массивами символов).
IOS
istream
ostream
iostream
ifstream
ofstream
fstream
Определены в классе IOS
left/right, dec/oct/hex, uppercase, scientific/fixed и др.
Для установки имеется метод setf, для сброса – unsetf.
Пример:
cout.setf(ios::left);
cout
cout.unsetf(ios::left);
Методы класса IOS
int ios::width() – возвращает значение ширины поля вывода ;
int ios::width(int a) – устанавливает ширину поля вывода ;
int ios::precision() – возвращает точности при выводе вещественных чисел ;
int ios::width(int a) – устанавливает ширину поля вывода ;
char ios::fill() – символ заполнения
char ios::fill(char c) – установка символа заполнения
Манипуляторы – функции, которые включаются в цепочки ввода и вывода для форматирования данных. Манипуляторы определены в заголовочном файле iomanip .
Основные манипуляторы
- endl/ends – символ новой строки/нулевой символ;
- dec/oct/hex – вывод чисел в десятичной/ восьмеричной/ шестнадцатиричной системе счисления;
- resetiosflags(long)/setiosflags(long) – сброс/ установка флагов;
- setw(int) – установка ширины вывода;
- setprecision(int) – установка количества цифр в дробной части вещественного числа;
- setfill(int) – установка символа-заполнителя.
Пример: cout
- форматированный ввод данных всех типов get( с ) – считывает символ; get (buf, num, lim=’\n’) – считывает num -1 символ (или пока не встретится lim ) и копирует их в строку buf . Затем к строке дописывается символ ‘\0’. getline(buf, num, lim=’\n’) – аналогична get , но в строку копируется и символ lim . ignore(num=1,lim=EOF) – пропускает num символов . peek() – возвращает символ без удаления его из потока read(buf,num) – считывает num символов в строку buf ; readsome(buf,num) – аналогично read , но возвращает количество считанных символов; seekg(pos ) – устанавливает указатель чтения на pos ; tellg() – возвращает текущую позицию чтения потока " width="640"
Класс iostream
Содержит методы для ввода данных
- форматированный ввод данных всех типов
get( с ) – считывает символ;
get (buf, num, lim=’\n’) – считывает num -1 символ (или пока не встретится lim ) и копирует их в строку buf . Затем к строке дописывается символ ‘\0’.
getline(buf, num, lim=’\n’) – аналогична get , но в строку копируется и символ lim .
ignore(num=1,lim=EOF) – пропускает num символов .
peek() – возвращает символ без удаления его из потока
read(buf,num) – считывает num символов в строку buf ;
readsome(buf,num) – аналогично read , но возвращает количество считанных символов;
seekg(pos ) – устанавливает указатель чтения на pos ;
tellg() – возвращает текущую позицию чтения потока
Класс ostream
В классе ostream определены методы для вывода:
— форматированный вывод данных любых типов
flush() — записывает содержимое потока вывода на физическое устройство;
put (с) — выводит в поток символ с и возвращает ссылку на поток;
seekp(pos) — устанавливает текущую позицию записи в значение pos ;
seekp(offs, org) — перемещает текущую позицию записи на offs байтов, считая от одной из трех позиций, определяемых параметром org : ios :: beg (от начала файла), 1 os :: cur (от текущей позиции) или ios : : end (от конца файла);
tellp()— возвращает текущую позицию записи потока;
write(buf, num) — записывает в поток num символов из массива buf и возвращает ссылку на поток.
cin – ввод
cout – вывод
cerr – вывод сообщений об ошибках
clog – вывод в журнал
cerr и clog всегда выводят на экран, но первый не использует буфер вывода.
В базовом классе ios определено поле state , которое представляет собой состояние потока в виде совокупности битов:
enum io_state {
goodbit = 0x00, eofbit = 0x01. failbit = 0x02, badbit = 0x04,
hardfail = 0x08 };
int rdstate () — возвращает текущее состояние потока;
int eof () — возвращает ненулевое значение, если установлен флаг eofbit ;
int fall () — возвращает ненулевое значение, если установлен один из флагов failbit , badbit или hardfail ;
int bad () — возвращает ненулевое значение, если установлен один из флагов badbit или hardfail ;
int good () — возвращает ненулевое значение, если сброшены все флаги ошибок;
void clear ( int = 0) — параметр принимается в качестве состояния ошибки, при отсутствии параметра состояние ошибки устанавливается 0;
operator void *() — возвращает нулевой указатель, если установлен хотя бы один бит ошибки;
operator ! () — возвращает ненулевой указатель, если установлен хотя бы один бит ошибки.
x) {} " width="640"
// Проверка флага
if (cin.rdstate() & ios::failbit) …
// Сбросить флаг
cin.rdstate(cin.rdstate() & ~ios::failbit)…
// Установить флаг
cin.rdstate(cin.rdstate() | ios::failbit)…
// проверка состояния потока
while (cin x) {}
ifstream – входной, ofstream – выходной, fstream – двунаправленный.
Потоковые классы имеют конструктор без параметров, который создает объект не связывая его с файлом и конструктор с двумя параметрами: fstream (const char* name, int mode) открывающий файл с именем name в режиме mode . Если режим не указан, то файлы откроются по умолчанию в текстовом режиме.
Режим задается битовыми масками, заданными в классе ios .
ios :: in – открыть для чтения,
ios::out - открыть для записи,
ios::ate – встать в конец файла,
ios::app – открыть файл для добавления,
ios::trunc – удалить файл, если он существует,
ios::nocreate – не создавать файл,
ios::noreplace – не перезаписывать файл,
ios::binary – двоичный режим.
Например
fstream f(“input.txt”, ios::in|ios::binary); открывает файл для чтения в двоичном режиме.
Для открытия файла можно использовать метод open с параметрами как у соответствующего конструктора. Закрывается файл методом close () или автоматически при вызове деструктора.
=0; i--) out return out; } } " width="640"
class stack {
…
friend ostream& operator
{ for (int i = s.top-1; i=0; i--)
out
return out;
}
}
Стандартная библиотека C++ включает тип string (строки) в модуле string.
Класс string автоматически управляет памятью для строк, определяет большое количество удобных операций и методов.
string()
string( const char*)
string (string&)
string s1,s2,s3="Hi!";
s1="Hello";
s2=s1;
, =, [] индексация символов " width="640"
= присваивание
+ , += сцепление строк
, =,
[] индексация символов
length(), size() – длина строки
max_size() – максимальная длина строки
capacity() – объем памяти, занимаемый строкой
empty() - истина, если строка пустая
Присваивание строки или части строки
assign(const string& s)
assign(const string& s, int pos, int n)
assign(const char *s, int n)
Добавление строки или части строки
append(const string& s)
append(const string& s, int pos, int n)
append(const char *s, int n)
Вставка строки или части строки
insert( int pos1, const string &s)
insert( int pos1, const string &s, int pos2, int n)
insert( int pos, const char *s, int n)
Удаление части строки
erase (int pos = 0, int n = npos)
Очистка строки
clear()
Замена части строки
replace ( int pos1, int n1, const string& s)
replace ( int pos1, int n1, const string& s, int pos2, int n2)
replace ( int pos1, int n1, const char* s, int n2)
Обмен строк
swap (string &s)
Выделение части строки
string substr (int pos = 0, int n = npos)
Преобразование строки в char*
char* c_str ()
int find( const string&s, int pos = 0) – левое вхождение
int rfind( const string&s, int pos = npos) – правое вхождение
int compare (const string&s)
int compare (int pos1, int n1, const string&s)
int compare (int pos1, int n1, const string&s, int pos2, int n2)

Потоковые классы (122 KB)

