Вход:  Пароль:  
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

2 Основные функции языка С/С++ (стандарт ANSI, POSIX)


2.1 Математические функции (math.h|cmath)

ceil, ceilf, ceill (POSIX)
double ceil(double x);
float ceilf(float x);
long double ceill(long double x);
Функции округления до наименьшего целого, не меньшего, чем аргумент.


cos (POSIX)
double cos(double x);
Возвращает значение косинуса x, где x – это значение в радианах.


exp (POSIX)
double exp(double x);
Возвращает значение числа 'e' возведенного в степень x.


fabs, fabsf, fabsl (POSIX)
double fabs(double x);
float fabsf(float x);
long double fabsl(long double x);
Абсолютное значение числа с плавающей точкой.


floor, floorf, floorl (POSIX)
double floor(double x);
float floorf(float x);
long double floorl(long double x);
Наибольшее целое значение, но не большее x.


fmod (POSIX)
double fmod(double x, double y);
Функция получения остатка от деления (с плавающей точкой).


log (POSIX)
double log(double x);
Возвращает натуральный логарифм x.


log10 (POSIX)
double log10(double x);
Возвращает десятичный логарифм x.


matherr (ANSI)
int matherr(struct expection *error_info);
Пользовательская функция обработки ошибок математических операций. Описание ошибки передается в указателе на структуру <error_info>


pow (POSIX)
double pow(double x, double y);
Возвращает значение x в степени y.


rand, srand <stdlib.h>
int rand(void);
void srand(unsigned int seed);
rand() – возвращает псевдослучайное число в диапазоне от нуля до RAND_MAX.
srand() – устанавливает свой аргумент как основу (seed) для новой последовательности псевдослучайных целых чисел, возвращаемых функцией rand().


sin (POSIX)
double sin(double x);
Возвращает значение синуса аргумента x, где x указан в радианах.


sqrt (POSIX)
double sqrt(double x);
Функция вычисления квадратного корня.


tan (POSIX)
double tan(double x);
Возвращает тангенс аргумента x, где x задан в радианах.


2.2 Функции для работы с дисками, директориями и файлами

2.2.1 Функции потокового ввода-вывода

fopen, fdopen, freopen (POSIX) <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fildes, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
fopen – открывает файл с именем path и связывает его с потоком.
fdopen – связывает поток с существующим описателем файла <fildes>.
freopen – открывает файл с именем path и связывает его с потоком stream. Исходный поток (если такой существовал) закрывается.


fclose (POSIX) <stdio.h>
int fclose( FILE *stream);
Закрывает поток <stream>.


feof (POSIX) <stdio.h>
int feof(FILE *stream);
Возвращает не ноль если достигнут конец файла (EOF) потока <stream>.


ferror (POSIX) <stdio.h>
int ferror(FILE *stream);
Возвращает не ноль если установлен признак ошибки чтение потока.


fgetc, getc, getchar (POSIX) <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
Считывает символ из потока <stream> или из stdin.


fgets, gets (POSIX) <stdio.h>
char *fgets(char *restrict s, int n, FILE *restrict stream);
char *gets(char *s);
Чтение строки из потока <stream> или из STDIN в буфер <s> размером <n>.


fgetwc, getwc (POSIX) <stdio.h, wchar.h>
wint_t fgetwc(FILE *stream);
wint_t getwc(FILE *stream);
Считывает широкий символ из потока <stream>.


fgetws (POSIX) <wchar.h>
wchar_t *fgetws(wchar_t *ws, int n, FILE *stream);
Чтение строки широких символов из потока <stream> в буфер <ws> размером <n>.


fprintf (POSIX) <stdio.h>
int fprintf(FILE *stream, const char *format, ...);
Осуществляет форматированный вывод в поток <stream> (Табл.10).


fputc, putc (POSIX) <stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
Помещает символ в поток <stream>.


fputs, puts (POSIX) <stdio.h>
int fputs(const char *restrict s, FILE *restrict stream);
int puts(const char *s);
Помещает строку <s> в поток <stream> или в STDOUT.


fputwc, putwc (POSIX) <stdio.h, wchar.h>
wint_t fputwc(wchar_t wc, FILE *stream);
wint_t putwc(wchar_t wc, FILE *stream);
Помещает широкий символ в поток <stream>.


fputws (POSIX) <wchar.h>
int fputws(const wchar_t *ws, FILE *stream);
Помещает строку широких символов <s> в поток <stream>.


fread (POSIX) <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
Чтение блоков данных <nmemb> размером <size> каждый из потока <stream> в буфер <ptr>. Возвращается количество удачно прочитаных блоков.


fseek, fseeko, fsetpos (POSIX) <stdio.h>
int fseek(FILE *stream, long offset, int whence);
int fseeko(FILE *stream, off_t offset, int whence);
int fsetpos(FILE *stream, const fpos_t *pos);
Установка позиции в потоке <stream> в соответствии с правилом <whence> и смещением <offset>. В случае с fsetpos позиция устанавливается из структуры <pos>.


fflush (POSIX) <stdio.h>
int fflush(FILE *stream);
«Сбрасывает» буферы потока <stream>.


ftell, ftello, fgetpos (POSIX) <stdio.h>
long ftell(FILE *stream);
off_t ftello(FILE *stream);
int fgetpos(FILE *restrict stream, fpos_t *restrict pos);
Получение текущей позиции в потоке <stream>. В случае с fgetpos выполняется заполнение структуры <pos>.


fwrite (POSIX) <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Запись в поток <stream> блоков данных <nmemb> размером <size> каждый из буфера <ptr>. Возвращается количество удачно записанных блоков.


perror (POSIX) <stdio.h>
void perror(const char *s);
Выводит в стандартный поток ошибки сообщения, описывая ошибку, произошедшую при последнем системном вызове или вызове библиотечной функции.


rewind (POSIX) <stdio.h>
void rewind(FILE *stream);
Сброс указателя позиции потока <stream>.


setbuf, setvbuf (POSIX) <stdio.h>
void setbuf(FILE *restrict stream, char *restrict buf);
int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
Установка правила буферизации потока <stream>. Если <buf> равно NULL, то буферизации отключается. Режим буферизации указывается в <type>: _IOFBF(полная буферизация), _IOLBF(построчная), _IONBF(отсутствие).


Таблица 9. Символы управления форматированием функций типа printf()
Элемент
Эффект
%[флаги][ширина][.точность][F | N | h | l]<тип>
Флаги
0Для чисел, ширина поля слева будет заполнена нулям.
-Производится выравнивание выводимого числа по левому краю в пределах выделенного поля. Правая сторона выделенного поля дополняется пробелами.
+Выводится знак числа символом '-' или '+'
*Обозначает пропуск при вводе поля, определенного данной спецификацией. Введенное значение не присваивается ни какой переменной.
<Пробел>Выводится пробел перед положительным числом и знак '-' перед отрицательным.
#

Выводится идентификатор системы счисления для целых:

  • 0 перед числом в восьмеричной с/c;
  • 0х или 0Х в шеснадцатеричной с/c;
  • ничего для чисел в десятичной с/c.
Ширина (воздействует только на вывод)
nОпределяет минимальную ширину поля в <n> символах. Если после преобразозования ширины недостаточно, то выводится столько символов сколько есть, с дополнением пробелами.
0nВсе тоже, но позиции слева для целого числа дополняются нулям.
*Число выводимых символов определяется значением соответствующей переменной.
Точность (воздействует только на вывод)
<ничего>Точность по умолчанию.
.0Для d, i, o, u, x – точность по умолчанию. Для e, E, f – десятичная точка отсутствует.
.nДля e, E, f не более <n> знаков после точки.
*Следующий аргумент из списка аргументов – точность.
Модификатор (воздействует там, где применимо)
hПеред d, i, o, u, x, X аргумент является – short int.
lПеред d, i, o, u, x, X аргумент является – long int. Перед e, E, f, g, G аргумент является – double (только для scanf).
LДлиное двойной точности.
FУказатель (FAR).
NУказатель (NEAR).
Поле образец – %[*][ширина] [образец]
Определяет множество символов, из которых может состоять вводимая строка. Если в образце стоит символ '^', то вводится будут все символы кроме перечисленных: [a-z],[A-F0–9]; [^0–9]
Тип переменной: char
cПри вводе, читается и передается переменной один байт. При выводе – байт переменной преобразуется к типу char и записуется в выходной поток.
Тип переменной: int
dДесятичное int со знаком.
iДесятичное int со знаком.
oВосьмеричное int без знака.
uДесятичное int без знака.
xШеcтнадцатеричное int без знака (0 – f).
XШестнадцатеричное int без знака (0 – F).
nУказатель NEAR (только смещение).
pУказатель FAR (сегмент[селектор]:смещение).
Тип переменной: float
fЗначение со знаком в форме [-]dddd.dddd .
eЗначение со знаком в форме [-]d.dddde[+ | -]ddd .
EЗначение со знаком в форме [-]d.ddddE[+ | -]ddd .
gЗначение со знаком в формате 'e' или 'f' в зависимости от значения и специфицированной точности.
GЗначение со знаком в формате 'E' или 'F' в зависимости от значения и специфицированной точности.
Тип переменной: char *
sПри вводе принимает символы без преобразования до тех пор, пока не встретится '\n' или пока не достигнута специфицированная точночть. При выводе выдаёт в поток все символы до тех пор пока не встретится '\0' или не достигнута специфицированная точность.

2.2.2 Работа с директориями

chdir, fchdir (POSIX) <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
Установка текущей директории <path>, <fd>.


ftw, nftw <ftw.h>
int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int depth);
int nftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag, struct FTW *s), int depth, int flags);
Перемещается по дереву каталогов, начиная с указанного каталога <dir>. Для каждого найденного элемента дерева вызываются: <fn()> с указанием полного имени этого элемента, указатель на структуру элемента <stat> и целое число. Функция nftw() выполняет то же самое, что и ftw(), только имеет еще один параметр, flags, то есть вызывает свои функции еще с одним параметром.


getcwd (POSIX) <unistd.h>
char *getcwd(char *buf, size_t size);
Копирует абсолютный путь к текущему рабочему каталогу в массив <buf>, имеющий длину <size>.


mkdir (POSIX) <sys/stat.h, sys/types.h>
int mkdir(const char *pathname, mode_t mode);
Создаёт каталог <pathname> с режимом <mode>.


opendir, closedir (POSIX) <sys/types.h, dirent.h>
DIR *opendir(const char *name);
int closedir(DIR *dir);
Открывает/закрывает поток каталога, соответствующий каталогу <name>.


readdir (POSIX) <sys/types.h, dirent.h>
struct dirent *readdir(DIR *dir);
Возвращает указатель <dir> на следующую запись каталога.


rmdir (POSIX) <unistd.h>
int rmdir(const char *pathname);
Удаляет каталог <pathname>.


2.2.3 Доступ к файлам

access (POSIX) <unistd>
int access(const char *pathname, int mode);
Проверка, имеет ли процесс <pathname> права <mode> на чтение(R_OK), запись(W_OK), выполнение(X_OK) или существование файла(F_OK).


close (POSIX) <unistd.h>
int close(int fd);
Закрывает открытый описатель файла <fd>.


creat (POSIX) <sys/types.h, sys/stat.h, fcntl.h>
int creat(const char *pathname, mode_t mode);
Создаёт файл <pathname> и возвращает его описатель.


dup, dup2 (POSIX) <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
dup – предоставляет новому описателю наименьший свободный номер. dup2 – делает <newfd> копией <oldfd> (если это необходимо), закрывая newfd.


fcntl (POSIX) <unistd.h, fcntl.h>
int fcntl(int fildes, int cmd, ...);
Выполняет различные операции <cmd> над файловым дескриптором <fildes>.


flock (BSD) <sys/file.h>
int flock(int fd, int operation);
Устанавливает или снимает <operation> «мягкую» блокировку открытого файла <fd>.


fsync, fdatasync (POSIX) <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
fsync – копирует все части файла, находящиеся в памяти, на устройство <fd>. fdatasync – тоже что и fsync, но без метаданных.


fileno (ANSI) <stdio.h>
int fileno(FILE *stream);
Возвращает описатель <stream>.


link (POSIX) <unistd.h>
int link(const char *oldpath, const char *newpath);
Создание ссылки <newpath> на файл <oldpath>.


lseek (POSIX) <sys/types.h, unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
Устанавливает позицию чтения/записи информации в файле.


mknod (BSD) <sys/types.h, sys/stat.h, fcntl.h, unistd.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
Создаёт файл (обычный файл, файл устройства или именованный канал) <pathname>, с правами доступа <mode> и дополнительной информацией <dev>.


open (POSIX) <sys/types.h, sys/stat.h, fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Открывает файл <pathname> и возвращает описатель файла.


pathconf, fpathconf (POSIX) <unistd.h>
long pathconf(char *path, int name);
long fpathconf(int filedes, int name);
Получение значения конфигурационной опции для указанного файла <path>, <filedes>. Конфигурационные опции:

_PC_LINK_MAX — максимальное количество ссылок на файл;
_PC_NAME_MAX — максимальная длина имени файла в полном имени;
_PC_PATH_MAX — максимальная длина полного имени указанного файла;
_PC_PIPE_BUF — размер указанного канала.

read, readv (POSIX) <unistd.h, sys/uio.h>
ssize_t read(int fd, void *buf, size_t count);
int readv(int fd, const struct iovec * vector, int count);
Записывает <count> байтов файлового описателя <fd> в буфер <buf> или вектор <vector>.


readlink (POSIX) <unistd.h>
ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize);
Помещает содержимое символьной ссылки <path> в буфер <buf> длиной <bufsiz>.


remove (ANSI,POSIX) <stdio.h>
int remove(const char *pathname);
Удаляет имя файла и, возможно, сам файл.


rename (ANSI) <unistd.h>
int rename(const char *oldpath, const char *newpath);
Изменяет имя или расположение файла <oldpath> на <newpath>.


select (POSIX) <sys/time.h, sys/types.h, unistd.h>
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, sigset_t *sigmask);
Ждут изменения статуса нескольких файловых описателей в течении <timeout>. n – на единицу больше самого большого номера описателей из всех наборов. Для манипуляции набором существуют 4 макроса:


sendfile (*) <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
Производит чтение данных из <in_fd> по смещению <offset> длиной <count> и запись их в <out_fd>.


stat, fstat, lstat (POSIX) <sys/types.h, sys/stat.h, unistd.h>
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
stat – возвращает информацию о файле <file_name> и заполняет буфер <buf>;
lstat – дополнительно информацию о ссылке;
fstat – информацию о <filedes>.


statvfs, fstatvfs (POSIX) <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
Получение информации о файловой системе на которой расположен файл <path>, <fd>.


symlink (POSIX) <unistd.h>
int symlink(const char *oldpath, const char *newpath);
Создание символьной ссылки <newpath> на файл <oldpath>.


write, writev (POSIX) <unistd.h, sys/uio.h>
ssize_t write(int fd, const void *buf, size_t count);
int writev(int fd, const struct iovec * vector, int count);
Записывает <count. байтов из буфера <buf> или вектора <vector> в файл <fd>.


unlink (POSIX) <unistd.h>
int unlink(const char *pathname);
Удаляет имя файла из файловой системы. Если это имя было последней ссылкой на файл и нет ни одного процесса, которые бы открыли этот файл, то файл удаляется.


Таблица 10. Стандартные потоки ввода-вывода

ИмяНазначение
stdin(0)Стандартный вход;
stdout(1)Стандартный выход (буфериз.);
stderr(2)Стандартный выход ошибок (небуфериз.);

2.2.4 Функции работы с временными файлами

mkstemp (BSD) <stdlib.h>
int mkstemp(char *template);
Создает временный файл с уникальным именем определённым <template>. <template> должен иметь в конце символы “XXXXXX”. Возвращает описатель fd созданного файла и заполняет XXXXXX, в template, сгенерированными символами. Нуждается в удалении!


mktemp (POSIX) <stdlib.h>
char *mktemp(char *template);
Создает временный файл с уникальным именем определённым <template>. <template> должен иметь в конце символы “XXXXXX”. Возвращает имя созданного файла.


tmpfile (POSIX) <stdio.h>
FILE *tmpfile (void);
Создает уникальное имя временного файла с помощью префикса пути P_tmpdir, определенного в <stdio.h>. Файл автоматически удаляется при его закрытии или в случае завершения основной программы.


2.3 Функции поддержки переменного числа параметров <stdarg.h>

va_arg (ANSI)
type va_arg(va_list arg_ptr, type);
Значение параметра типа <type> выбирается из стека <arg_ptr>, по одному за каждое обращение к функции. Макрокоманда <va_arg> может использоваться любое число раз для отыскания параметров в списке.


va_end (ANSI)
void va_end(va_list arg_ptr);
Присваивает аргументу-указателю <arg_ptr> значение запрещающее его последующее использование (без повторной инициализации va_start).


va_start (ANSI)
void va_start(va_list arg_ptr, prev_param);
Назначает указателю <arg_ptr> адрес первого параметра в стеке входных параметров <prev_param>.


2.4 Функции/переменные работы со временем и временными интервалами

alarm (SVr4, SVID, POSIX, X/OPEN, BSD 4.3) <unistd.h>
unsigned int alarm(unsigned int seconds);
Настраивающая таймер на подачу сигнала ALARM.


asctime, ctime (POSIX) <time.h>
char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timep);
Преобразует время <timep>, <timeptr> в строку в формате «Wed Jun 30 21:49:08 1993».


clock_gettime, clock_getres, clock_settime (POSIX) <time.h>
int clock_getres(clockid_t clock_id, struct timespec *res);
int clock_gettime(clockid_t clock_id, struct timespec *tp);
int clock_settime(clockid_t clock_id, const struct timespec *tp);
Функции манипуляции системными часами <clock_id>. В соответствии со стандартом POSIX должны поддерживаться часы: CLOCK_MONOTONIC, CLOCK_MONOTONIC_HR, CLOCK_REALTIME и CLOCK_REALTIME_HR.


daylight (POSIX) <time.h>
extern int daylight;
Переход на летнее время.


gmtime, localtime (POSIX) <time.h>
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
Преобразуют календарное время <timep> во время по Гринвичу и локальное;


mktime (POSIX) <time.h>
time_t mktime(struct tm *timeptr);
Преобразует структуру локального представления <timeptr> времени в структуру календарного представления.


setitimer, getitimer (POSIX.1–2001) <sys/time.h>
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
int getitimer(int which, struct itimerval *value);
Получить и установить значение value интервального таймера <which>. Старое значение таймера сохраняется в <ovalue>. Типы таймеров <which>:


strftime (ANSI) <time.h>
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
Форматирует время <tm> в соответствии с указанным форматом <format> и помещает результат в символьный массив <s> размером <max>.


time (POSIX) <time.h>
time_t time(time_t *t);
Возвращает/устанавливает текущее время <t>


timer_create (POSIX) <time.h, signal.h>
int timer_create(clockid_t clockid, struct sigevent *restrict evp, timer_t *restrict timerid);
Создание таймера используя часы <clockid> (CLOCK_REALTIME, CLOCK_MONOTONIC) в соответствии со структурой уведомления <evp>. В результате успешного создания таймера возвращается идентификатор <timerid>.


timer_delete (POSIX) <time.h>
int timer_delete(timer_t timerid);
Удаление таймера ранее созданного функцией timer_create().


timer_gettime (POSIX) <time.h>
int timer_gettime(timer_t timerid, struct itimerspec *value);
Получение значения таймера, созданного функцией timer_create(), в <value>.


timer_settime (POSIX) <time.h>
//int timer_settime(timer_t timerid, int flags, const struct itimerspec *restrict value, struct itimerspec *restrict ovalue);
Установка таймера, созданного функцией timer_create(), в значение <value>, предварительно сохранив предыдущее значение в <ovalue>.


times (POSIX) <sys/times.h>
clock_t times(struct tms *buf);
Возвращает текущие состояние счетчика тиков, а также информации о времени выполнения процесса и его порожденных процессов в <buf>.


timezone (POSIX) <time.h>
long int timezone;
Содержит разницу, в секундах, между локальным временем и по Гринвичу.


tzname (POSIX) <time.h>
extern char *tzname[2];
Имя текущей временной зоны.


sleep, usleep, nanosleep (POSIX) <unistd.h, time.h>
unsigned int sleep(unsigned int seconds);
void usleep(unsigned long usec);
int nanosleep(const struct timespec *req, struct timespec *rem);
Функция задаёт интервал паузы: seconds – секунды, usec – микросекунды и req – наносекундах. В rem помещается реально прошедшее время.


2.5 Функции проверки и преобразования символов <ctype.h, cctype>

isalnum (ANSI)
int isalnum(int c);
Проверяет символ на принадлежность к текстовым символам.


isalpha (ANSI)
int isalpha(int c);
Проверяет символ на принадлежность к алфавитным символам (в стандартном окружении “C”).


isascii (ANSI)
int isascii(int c);
Проверяет, является ли <c> 7-битным unsigned char, значение которого попадает в таблицу символов ASCII.


iscntrl (ANSI)
int iscntrl(int c);
Проверяет, является ли символ управляющим.


isdigit (ANSI)
int isdigit(int c);
Проверяет, является ли символ цифрой.


isgraph (ANSI)
int isgraph(int c);
Проверяет, является ли символ печатаемым (не пробел).


islower (ANSI)
int islower(int c);
Проверяет, является ли символ символом нижнего регистра.


isprint (ANSI)
int isprint(int c);
Проверяет, является ли символ печатаемым (включая пробел).


ispunct (ANSI)
int ispunct(int c);
Проверяет, является ли символ печатаемым (не должен быть пробелом или текстовым символом).


isspace (ANSI)
int isspace(int c);
Проверяет, являются ли символы неотображаемыми.


isupper (ANSI)
int isupper(int c);
Проверяет, расположен ли символ в верхнем регистре.


isxdigit (ANSI)
int isxdigit(int c);
Проверяет, принадлежит ли символ к шестнадцатеричному числу.


toascii (ANSI)
int toascii(int c);
Преобразует <c> в 7-битное значение unsigned char, т.е. превращает его в ASCII-символ посредством «сбрасывания» старшего бита.


toupper, tolower (ANSI)
int toupper(int c);
int tolower(int c);
Преобразует символ <c> к верхнему или нижнему регистру.


2.6 Функции работы со строками

atof (POSIX) <stdlib.h, cstdlib>
double atof(const char *nptr);
Преобразует строку <nptr> в вещественное число типа double.


atoi, atol, atoll, atoq (POSIX) <stdlib.h, cstdlib>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);
Преобразуют строку в целое число.


bzero (BSD) <string.h>
void bzero(void * s, size_t n );
Заполняет нулями байты строки.


ecvt, fcvt, gcvt <stdlib.h, cstdlib>
char *ecvt(double number, int ndigits, int *decpt, int *sign);
char *fcvt(double number, int ndigits, int *decpt, int *sign);
char *gcvt(double number, size_t ndigit, char *buf);
Преобразует число с плавающей точкой в строку.


strcat, strncat (POSIX) <string.h>
char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
Добавляет строку <str> (n символов для strncat) к строке <dest>, перезаписывая символ окончания в конце <dest> и добавляя к строке символ окончания.


strchr,strrchr (POSIX) <string.h>
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
Определение местонахождения символа в строке.


strcmp, strncmp (POSIX) <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
Сравнивает две (n символов для strncmp) строки: s1 и s2. Возвращая целое число, которое меньше, больше нуля или равно ему, если s1 соответственно меньше, больше или равно s2.


strcpy, strncpy (POSIX) <string.h>
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
Копирует строку (n символов для strncpy), на которую указывает <src> (включая завершающий символ окончания), в массив, на который указывает <dest>.


strdup, strndup, strdupa, strndupa (BSD) <string.h>
char *strdup(const char *s);
char *strndup(const char *s, size_t n);
char *strdupa(const char *s);
char *strndupa(const char *s, size_t n);
Дублируют строку;


strerror (POSIX) <string.h>
char *strerror(int errnum);
Возвращает строку с описанием кода ошибки, переданного в аргументе errnum.


strlen (POSIX) <string.h>
size_t strlen(const char *s);
Вычисляет длину строки <s>. Завершающий символ окончания не учитывается.


strpbrk (POSIX) <string.h>
char *strpbrk(const char *s, const char *accept);
Ищет первое совпадение в строке <s> с любым символом из строки <accept>.


strspn, strcspn (POSIX) <string.h>
size_t strspn(const char *s, const char *accept);
size_t strcspn(const char *s, const char *reject);
поиск набора символов в строке.


strstr <string.h>
char *strstr(const char *haystack, const char *needle);
Находит первую встретившуюся подстроку <needle> в строке <haystack>.


strtok, strtok_r (POSIX) <string.h>
char *strtok(char *s, const char *delim);
char *strtok_r(char *s, const char *delim, char **ptrptr);
Разбивает строку <s> на «лексемы» логические куски, такие, как слова в строке текста – разделённые символами, содержащимися в <delim>. Последующие вызовы производить с <s> = NULL.


strtod, strtof, strtold (ANSI) <stdlib.h, cstdlib>
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
Конвертируют строки ASCII в число с плавающей запятой.


strtoul, strtoull (POSIX) <stdlib.h, cstdlib>
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);
Конвертирует строку в беззнаковое целое число.


strxfrm (BSD) <string.h>
size_t strxfrm(char *dest, const char *src, size_t n);
Преобразует строку <src> в такую форму, что выполнение strcmp() над двумя такими строками, преобразованными посредством strxfrm(), будет таким же, как и выполнение strcoll над исходными строками.


2.7 Потоковая обработка строк <string>

Для работы со строками в языке C++ предусмотрен шаблонный класс basic_string из которого определяется класс string:

typedef basic_string <char> string;
typedef basic_string <wchar_t> string; \\для UNICODE


Примеры инициализации строк:

string s1("Hello");  //Строка "Hello"
string s2(8,x);      //Восемь символов 'x'
string month = "March"; //Строка "March"
s = 'n'              //символ 'n'
cin >> s;            //вводить в <s>
getline(cin,s);      //--//--
str1.assign(str2);
str1[2] = 'r';       //Присвоить 'r'
string s1(s2+"test");


Для потоковой обработки строк используются классы: <ostringstream>

outstring << S1 << S2 << S3 << 2 << 3.58;
cout << outstring.str();
instring >> S1 >> S2 >> i;

2.7.1 Функции

operator==, !=, >, <, >=, <=
Операторы сравнения строк.


assign
basic_string& assign (const basic_string& str, size_type pos = 0, size_type n = npos);
basic_string& assign (const charT* s, size_type n);
basic_string& assign (const charT* s);
basic_string& assign (size_type n, charT c);
Создаёт новую строку из участка старой.


append
basic_string& append(const basic_string& str, size_type pos = 0, size_type n = npos);
basic_string& append (const charT* s, size_type n);
basic_string& append (const charT* s);
basic_string& append (size_type n, charT c);
basic_string& append(InputIterator first, InputIterator last);
Добавление к строке.


at
reference at(size_type pos);
const_reference at(size_type pos) const;
Получить символ по с индексом <POS>.


begin, end
iterator begin ();
iterator end ();
Возвращает итератор;


capacity
size_type capacity() const;
Максимальный размер строки без увеличения памяти под строку.


compare
int compare (const basic_string& str, size_type pos = 0, size_type n = npos) const;
int compare (const charT* s, size_type pos, size_type n) const;
int compare (const charT* s, size_type pos = 0) const;
Сравнение строк.


copy
size_type copy (charT* s, size_type n, size_type pos = 0) const;
Копировать строку в адрес определённый указателем.


с_str
const charT* c_str() const;
Возвращает указатель на строку с нулём в конце.


data
charT* data()
Возвращает указатель на строку без нуля в конце.


empty
bool empty() const;
Проверка строки на пустоту.


erase
basic_string& erase(size_type pos = 0, size_type n = npos);
iterator erase(iterator p);
iterator erase(iterator f, iterator l);
Удаление всех символов начиная от указанной позиции.


begin, end
iterator begin();
iterator end();
Получение начального/конечного итератора.


find, rfind
size_type find(const basic_string& str, size_type pos = 0) const;
size_type rfind(const basic_string& str, size_type pos = npos) const;
Поиск сначала/конца строки.


find_first_of, find_last_of
size_type find_first_of(const basic_string& str, size_type pos = 0) const;
size_type find_last_of (const basic_string& str, size_type pos = npos) const;
Поиск сначала/конца строки одного из перечисленных символов.


find_first_not_of, find_last_not_of
size_type find_first_not_of(const basic_string& str, size_type pos = 0) const;
size_type find_last_not_of (const basic_string& str, size_type pos = npos) const;
Поиск сначала/конца первого символа отсутствующего в списке.


insert
basic_string& insert(size_type pos1, const basic_string& str, size_type pos2 = 0, size_type n = npos);
Вставка в строку части другой строки.


length, size
size_type length() const;
size_type size() const;
Длина строки.


max_size
size_type max_size() const;
Максимальная длина строки.


replace
basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2 = 0, size_type n2 = npos);
Заменить участок строки.


resize
void resize (size_type n, charT c);
void resize (size_type n);
Изменить длину строки.


substr
basic_string substr(size_type pos = 0, size_type n = npos) const;
Получение части строки;


swap
void swap (basic_string &s)
Перестановка строк.


2.8 Стандартная библиотека шаблонов (STL)

STL представляет собой большую библиотеку шаблонов включающую в себя три ключевых компонента: контейнеры, итераторы, алгоритмы. Кроме того, STL является расширяемой библиотекой. STL избегает операторов new и delete и использует распределители памяти(allocators) для выделения и высвобождения памяти. Существует возможность создавать пользовательские распределители памяти. Типы исключений в STL:

2.8.1 Контейнеры

Контейнеры делятся на три основных категории: контейнеры последовательностей, ассоциативные контейнеры и адаптеры контейнеров. Контейнеры последовательностей (sequence containers) и Ассоциативные контейнеры имеют общее название – контейнеры первого класса (first-class containers). Существует ещё четыре типа контейнеров, которые считаются «почти контейнерами» («near-containers») – С-подобные массивы, string, bitset и valarray.


Контейнерные заголовочные файлы стандартной библиотеки:

Общие имена типа typedef имеющиеся в контейнерах первого класса:


Таблица 11. Контейнерные классы STL
Имя
Назначение
Тип итератора
Контейнеры последовательностей
vectorБыстрые вставки и удаление в конец контейнера, прямой доступ к любому элементу.произв. доступ
dequeБыстрые вставки и удаления в начало и конец контейнера, прямой доступ к любому элементу.произв. доступ
listДвухсвязный список, быстрая вставка и удаление элементов везде.двунапр.
Ассоциативные контейнеры
setБыстрый поиск, дубликаты (одинаковые ключи)не допускаются.двунапр.
multisetБыстрый поиск, допускаются дубликаты.двунапр.
mapВзаимно однозначное соответствие, дубликаты не допускаются, быстрый поиск значения по ключу.двунапр.
multimapСоответствие «один ко многим», дублирование ключей допускается, быстрый поиск значения по ключу.двунапр.
Адаптеры контейнеров
stack«Последним пришел, первым вышел» (LIFO)не поддерж.
queue«Первым пришел, первым вышел» (FIFO)не поддерж.
priority_ queueЭлемент с наивысшим приоритетом всегда достигает выхода из очереди первым.не поддерж.

Таблица 12. Общие для всех STL-контейнеров функции
Имя
Назначение
default constructorКонструктор для обеспечения инициализации по умолчанию.
copy constructorКонструктор, который инициализирует контейнер в качестве копии существующего контейнера.
destructorДеструктор контейнера.
emptyПроверка контейнера на пустоту.
max_sizeВозвращает максимальное число элементов в контейнере.
sizeВозвращает число элементов в контейнере.
=Присваивает один контейнер другому.
<, <=, >, >=, ==, !=Сравнивает два контейнера.
swapПоменять местами элементы двух контейнеров.
Только в контейнерах первого класса
beginВозвращает iterator, либо const_iterator который ссылается на первый элемент контейнера.
endВозвращает iterator, либо const_iterator который ссылается на последний элемент контейнера.
rbeginВозвращает reverse_iterator, либо const_reverse_iterator который ссылается на последний элемент контейнера.
rendВозвращает reverse_iterator, либо const_reverse_iterator который ссылается на позицию перед первым элементом контейнера.
eraseУдаляет один или несколько элементов из контейнера.
clearУдаляет все элементы из контейнера.

Контейнеры последовательностей

Классы vector и deque реализованы на базе массивов. Класс list реализует связанный список. Дополнительные операции характерные для контейнеров последовательностей:


front
front();
Возвращает ссылку на первый элемент в контейнере.


back
back();
Возвращает ссылку на последний элемент в контейнере.


push_back
push_back();
Вставляет новый элемент в конец контейнера.


pop_back
pop_back();
Выталкивает последний элемент контейнера.


Контейнер vector обеспечивает структуру данных непрерывной областью памяти. Это позволяет обеспечивает эффективный прямой доступ к любому элементу контейнера vector посредством операции индексирования []. Все алгоритмы STL могут работать с контейнером vector. Итераторы для vector обычно реализуются как указатели на элементы контейнера vector.

std::vector<int> v;
v.push_back(2);
cout << "\nРазмер вектора v: " << v.size();

std::vector<int>::const_iterator p1;
for(p1 = v.begin(); p1 != v.end(); p1++) cout << *p1 << ' ';
std::vector<int>::reverse_iterator p2;
for(p2 = v.rbegin(); p2 != v.rend(); ++p2) cout << *p2 << ' ';

int a[ 6 ] = { 1, 2, 3, 4, 5, 6 };
std::vector<int> v1(a, a+6);
std::ostream_iterator<int> output(cout," ");
std::copy(v1.begin(), v1.end(), out); //печать вектора
try
{
  v1.at(100) = 777;   //доступ вне массива

catch(std::out_of_range e)
{ cout << "\nИсключение" << e.what(); }
v1.erase(v.begin());


Контейнер list предоставляет эффективную реализацию операции вставки и удаления в любую позицию контейнера. Класс list реализуется как двухсвязный список, то есть каждый узел в list содержит указатель на предыдущий и на следующий узел. Любой алгоритм, который требует итераторов для чтения и для записи, прямых и двунаправленных итераторов, может выполняться с list. Дополнительные функции класса list:


inplace_merge
void inplace_merge(_BidirectionalIter first, _BidirectionalIter middle, _BidirectionalIter last, _Compare comp);
Объединяет две возростающие последовательности в одном и том же контейнере.


splice
splice();
Вырезает элементы из одного контейнера и помещает их в другой.


push_front
push_front();
Вставить элемент в начало контейнера.


pop_front
pop_front();
Вытолкнуть элемент с начала контейнера.


remove
remove();
Удалить элемент из начала контейнера.


merge
_OutputIter merge(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result)
Объединяет две возростающие последовательности в одну.


sort
void sort(_RandomAccessIter first, _RandomAccessIter last);
Сортировка элементов в возрастающем порядке.


std::list<int> Values, otherValues;
Values.push_front(1);
Values.push_back(2);
values.sort();


Контейнер deque объединяет многие возможности классов vector и list. Реализуется на основе очереди с двумя концами и обеспечивает эффективный индексный доступ с эффективной операцией вставки в начало и конец контейнера. Класс deque обеспечивает поддержку итераторов произвольного доступа. Наиболее часто deque используется в качестве очереди FIFO.


std::deque<double> values;
std::ostream_iterator<double> output(cout," ");
values.push_front(2.2);
values.push_back(1.1);
for(int i=0; i < values.size(); ++i) 
  cout << values[i] << ' ';
values.pop_front();
values[1]=5.4;

Ассоциативные контейнеры

Ассоциативные контейнеры STL предназначены для обеспечения прямого доступа с целью сохранения и выборки элементов с помощью ключей (ключи поиска). Имеется четыре ассоциативных контейнера: multiset, set, multimap, map. В каждом контейнере ключи сохраняются упорядоченными. Ассоциативные контейнеры поддерживают дополнительные функции:


equal_range
pair<_ForwardIter, _ForwardIter> equal_range(_ForwardIter first, _ForwardIter last, const _Tp& val);
Возвращает пару прямых итераторов, содержащих результаты lower_bound и upper_bound.


find
find();
Поиск ключа.


lower_bound
_ForwardIter __lower_bound(_ForwardIter first, _ForwardIter last, const _Tp& val, _Distance*)
Определения позиции первого вхождения указанного ключа.


upper_bound
_ForwardIter upper_bound(_ForwardIter first, _ForwardIter last, const _Tp& val)
Определения позиции за последним вхождением указанного ключа.


count
count();
Возвращает количество указанных ключей в контейнере.


Контейнеры multiset и set используются для быстрого сохранение и выборки ключей. Контейнер multiset допускает использование одинаковых ключей. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не итераторы произвольного доступа).


int a[10] = {7,22,9,1,18,30,100,22,85,13};
typedef std::multiset<int, std::<int> > ims;
ims intMultiset;
std::ostream_iterator<int> output(cout, " ");
intMultiset.insert(15);
result=intMultiset.find(20);
if ( result != intMultiset.end() ) cout << "Найдено значение";
intMultiset.insert(a, a+10);
std::copy(intMultiset.begin(),intMultiset.end(), output);


Контейнеры multimap и map используются для быстрого сохранения и нахождения ключей и ассоциированных значений (пара ключ/значение). При вставке в эти контейнеры используется объект pair. Контейнер multimap позволяет ассоциировать несколько значений с одним ключем. Упорядочение элементов определяется компараторным объектом-функцией. Контейнеры поддерживает двунаправленные итераторы (но не итераторы произвольного доступа).


typedef std::multimap<int, double, std::less<int> > mmid;
mmid pairs;
pairs.insert(mmid::value_type(15, 2.7) );
for(mmid::const_iterator iter = pairs.begin(); 
    iter != pairs.end(); ++iter)
  cout << iter->first << '\t' << iter->second << '\n';
pairs[25]=45.65;


Адаптеры контейнеров

STL предоставляет три адаптера контейнера – stack, queue, priority_queue. Адаптеры не являются контейнерами первого класса, поскольку они не предоставляют реализации фактической структуры данных в которой могут сохраняться элементы, и поскольку адаптеры не поддерживают итераторы. Все три класса адаптеров предоставляют функции-члены push и pop, которые реализуют соответствующий метод вставки элемента.


Адаптер stack обеспечивает структуру LIFO и может быть реализован с любым из контейнеров последовательности. Адаптер queue обеспечивает структуру FIFO и может быть реализован с контейнерами list и deque. Адаптер priority_queue обеспечивает очередь в которой наиболее приоритетное значение всегда будет удаляться первым. priority_queue может быть реализован с контейнерами vector и deque. Сравнение элементов выполняется с помощью функции-объекта less<T>.


std::stack<int> intDequeStack;
std::stack<int, std::vector<int> > intVectorStack;
std::stack<int, std::list<int> > intListStack;

intDequeStack.push(23);
intVectorStack.push(23);
intListStack.push(34);


2.8.2 Итераторы

Итераторы схожи с указателями и используются для указания на элементы контейнеров первого класса. STL контейнеры первого класса предоставляют функции-члены begin() и end(), которые возвращают итератор указывающий соответственно на первый и последний элемент контейнера. Если итератор i указывает на определённый элемент, то ++i указывает на «следующий» элемент, а *i ссылается на элемент, на который указывает i. Итератор, полученый из функции end(), может использоваться в сравнении на равенство и неравенство для определения окончания «движущегося итератора». Для ссылки на элемент контейнера используется объект типа iterator или const_iterator.


Таблица 13. Операции с итераторами для каждого типа итератора
Имя
Назначение
Все итераторы
++pПреинкримент итератора
p++Постинкримент итератора
Итераторы ввода
*pРазыменование итератора
p=p1Присвоение итератора итератору
p==p1Сравнение итераторов на равенство
p!=p1Сравнение итераторов на неравенство
Итераторы вывода
*pРазыменование итератора
p=p1Присвоение итератора итератору
Однонаправленные итераторы
*Обеспечивают все функциональные возможности итераторов ввода и вывода
Двунаправленные итераторы
-pПредекремент итератора
p-Постдекремент итератора
Итераторы с произвольным доступом
p+=iИнкремент итератора p на i позиций
p-=iДекремент итератора p на i позиций
p+iИтератор помещается на позицию p+i
p-iИтератор помещается на позицию p-i
p[i]Возвращение ссылку на элемент, смещённый от p на i позиций
p<p1, p<=p1, p>p1, p>=p1Сравнение итераторов

Категории итераторов:


Категория итератора, поддерживаемая каждым контейнером, определяет, может ли этот контейнер использоваться со специфическими алгоритмами в STL.

2.8.3 Алгоритмы

Контейнеры инкапсулируют некоторые базовые операции, но STL-алгоритмы реализуются независимо от контейнеров. Алгоритмы оперируют элементами контейнеров только с помощью итераторов. Можно создавать собственные алгоритмы.

Алгоритмы, модифицирующие последовательности

copy
copy();
Копирование.


copy_backward
_BidirectionalIter2 __copy_backward(_BidirectionalIter1 first, _BidirectionalIter1 last, _BidirectionalIter2 result, bidirectional_iterator_tag, _Distance*)
Обратное копирование части одного контейнера в другой контейнер.


fill
void fill(_ForwardIter first, _ForwardIter last, const _Tp& value);
Заполняет все элементы контейнера значением <value>.


fill_n
_OutputIter fill_n(_OutputIter first, _Size n, const _Tp& value);
Заполняет указанные элементы контейнера значением <value>.


generate
void generate(_ForwardIter first, _ForwardIter last, _Generator gen)
Заполняет все элементы контейнера значением возвращаемым функцией <gen>.


generate_n
generate_n();
Заполняет указанные элементы контейнера значением возвращаемым функцией <gen>.


iter_swap
void iter_swap(_ForwardIter1 a, _ForwardIter2 b);
Перестановка значений контейнера (по ссылке).


includes
bool includes(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);
Проверяет находятся ли элементы второго множества в первом.


next_permutation
bool next_permutation(_BidirectionalIter first, _BidirectionalIter last);
Следующая перестановка в лексикографическом порядке.


prev_permutation
bool prev_permutation(_BidirectionalIter first, _BidirectionalIter last);
Предыдущая перестановка в лексикографическом порядке.


partition
_ForwardIter partition(_ForwardIter first, _ForwardIter last, _Predicate pred);
Разделение диапазонов элементов.


remove
_ForwardIter remove(_ForwardIter first, _ForwardIter last, const _Tp& value);
Удаление из указанного участка контейнера всех указанных объектов <value>


remove_copy
_OutputIter remove_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp& value);
Перенос из указанного участка контейнера в другой контейнер всех указанных объектов <value>.


remove_copy_if
remove_copy_if();
Перенос из указанного участка контейнера в другой контейнер объектов выбранных функцией сравнения <pred>.


remove_if
_ForwardIter remove_if(_ForwardIter first, _ForwardIter last, _Predicate pred);
Удаление из указанного участка контейнера объектов выбранных функцией сравнения <pred>


replace
void replace(_ForwardIter first, _ForwardIter last, const _Tp& old_value, const _Tp& new_value);
Производит замену объекта <old_value> на <new_value> по указанному участку контейнера.


replace_copy
_OutputIter replace_copy(_InputIter first, _InputIter last, _OutputIter result, const _Tp& old_value, const _Tp& new_value);
Производит замену объекта <old_value> на <new_value> по указанному участку контейнера и помещений старых значений в контейнер <result>.


replace_copy_if
_OutputIter replace_copy_if(Iterator first, Iterator last, _OutputIter result, _Predicate pred, const _Tp& new_value);
Производит замену объекта выбраного функцией <pred> на <new_value> по указанному участку контейнера и помещений старых значений в контейнер <result>.


replace_if
void replace_if(_ForwardIter __first, _ForwardIter last, _Predicate pred, const _Tp& new_value);
Производит замену объекта выбраного функцией <pred> на <new_value> по указанному участку контейнера.


reverse
void reverse(_BidirectionalIter first, _BidirectionalIter last, bidirectional_iterator_tag);
Инвертирование последовательности указанных элементов контейнера./


reverse_copy
_OutputIter reverse_copy(_BidirectionalIter first, _BidirectionalIter last, _OutputIter result);
Копирует указанные элементы в обратном порядке.


rotate
_ForwardIter rotate(_ForwardIter first, _ForwardIter middle, _ForwardIter last);
Ротация элементов.


rotate_copy
_OutputIter rotate_copy(_ForwardIter first, _ForwardIter middle, _ForwardIter last, _OutputIter result);
Ротация элементов с копированием.


set_difference
_OutputIter set_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);
Определение элементов из первого множества отсутствующих во втором.


set_intersection
_OutputIter set_intersection(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);
Определение элементов из первого множества присутствующих во втором.


set_symmetric_difference
_OutputIter set_symmetric_difference(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);
Определение элементов из первого множества отсутствующих во втором и элементов второго отсутствующих в первом.


set_union
_OutputIter set_union(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2, _OutputIter result);
Создаёт множество отсортированных элементов их двух контейнеров в третьем.


stable_partition
_ForwardIter stable_partition(_ForwardIter first, _ForwardIter last, _Predicate pred);
Подобна partition.


swap
void swap(_Tp& a, _Tp& b);
Перестановка значений контейнера.


swap_ranges
_ForwardIter2 swap_ranges(_ForwardIter1 first1, _ForwardIter1 last1, _ForwardIter2 first2);
Перестановка группы элементов контейнера.


transform
transform();
-//-


unique
_ForwardIter unique(_ForwardIter first, _ForwardIter last);
Удаляет из контейнера одинаковые элементы


unique_copy
_OutputIter unique_copy(_InputIter first, _InputIter last, _OutputIter result, _Tp*);
Копирует все уникальные элементы в другой контейнер.

Алгоритмы, не модифицирующие последовательности

adjacent_find
_ForwardIter adjacent_find(_ForwardIter first, _ForwardIter last, _BinaryPredicate binary_pred);
Возвращает итератор для чтения, указывающий на первый из двух идентичных смежных элементов в последовательности.


equal
inline bool equal(_InputIter1 first1, _InputIter1 last1,_InputIter2 first2);
Сравнение указанных участков двух контейнеров.


find
_InputIter find(_InputIter first, _InputIter last, const _Tp& val, input_iterator_tag);
Возвращает положение искомого значения <val>


find_each
find_each();
-//-


find_end
find_end();
-//-


find_first_of
find_first_of();
-//-


find_if
InputIter find_if(_InputIter first, _InputIter last, _Predicate pred, input_iterator_tag);
Возвращает положение значения определённого функцией <pred>.


lexicographical_compare
bool lexicographical_compare(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2, _InputIter2 last2);
Используется для лексикографического сравнения двух массивов символов.


max
const _Tp& max(const _Tp& a, const _Tp& b);
Определение максимального значения.


min
const _Tp& min(const _Tp& a, const _Tp& b);
Определения минимального значения.


mismatch
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 first1, _InputIter1 last1, _InputIter2 first2);
Выполняет сравнение указанных участков двух контейнеров и возвращает пару итераторов указывающих различные позиции контейнеров.

std::pair<std::vector<int>::iterator, std::vector<int>::iterator> location; 
location = std::mismatch(v1.begin(),v1.end(),v3.begin());


search
search();
-//-


search_n
search_n();
-//-

Числовые алгоритмы <numeric>

accumulate
_Tp accumulate(_InputIterator first, _InputIterator last, _Tp init);
Суммирование значений указанной области контейнера.


adjacent_difference
_OutputIterator adjacent_difference(_InputIterator first, _InputIterator last, _OutputIterator result);
Вычисление разницы между парой смежных элементов


count
void count(_InputIter first, _InputIter last, const _Tp& value,_Size& n);
Выполняет подсчет количества объектов <value> в указанной области контейнера.


count_if
void count_if(_InputIter first, _InputIter last, _Predicate pred, _Size& n);
Выполняет подсчет количества объектов выбранных функцией <pred> в указанной области контейнера.


for_each
_Function for_each(_InputIter first, _InputIter last, _Function f);
Применение функции <f> к указанным элементам контейнера. Общая функция должна принимать текущий элемент в качестве аргумента и не должна модифицировать этот элемент.


inner_product
_Tp inner_product(_InputIterator1 first1, _InputIterator1 last1, _InputIterator2 first2, _Tp init);
Вычисление суммы произведений двух последовательностей.


max_element
_ForwardIter max_element(_ForwardIter first, _ForwardIter last);
Возвращает указатель на максимальный элемент в контейнере.


min_element
_ForwardIter min_element(_ForwardIter first, _ForwardIter last);
Возвращает указатель на минимальный элемент в контейнере.


nth_element
void nth_element(_RandomAccessIter first, _RandomAccessIter nth, _RandomAccessIter last);
Разделение диапазонов элементов.


partial_sum
_OutputIterator partial_sum(_InputIterator first, _InputIterator last, _OutputIterator result);
Вычисление суммы элементов двух контейнеров с накоплением.


partial_sort
void partial_sort(_RandomAccessIter first, _RandomAccessIter middle, _RandomAccessIter last);
Сортировка части последовательности.


partial_sort_copy
_RandomAccessIter partial_sort_copy(_InputIter first, _InputIter last, _RandomAccessIter result_first, _RandomAccessIter result_last);
Сортировка части последовательности с копированием результата.


random_shuffle
inline void random_shuffle(_RandomAccessIter first, _RandomAccessIter last);
Располагает элементы указанного участка контейнера в произвольном порядке.


stable_sort
void stable_sort(_RandomAccessIter first, _RandomAccessIter last);
Сортировка (аналогично sort)


transform
_OutputIter transform(_InputIter first, _InputIter last, _OutputIter result, _UnaryOperation oper);
Применение функции <f> к указанным элементам контейнера. Общая функция должна принимать текущий элемент в качестве аргумента, не должна модифицировать этот элемент и должна возвращать трансформированное значение.

Алгоритмы, сортировки кучи

make_heap
make_heap(_RandomAccessIterator first, _RandomAccessIterator last);
Создание и инициализация кучи.


pop_heap
void pop_heap(_RandomAccessIterator first, _RandomAccessIterator last);
Удаление элемента с вершины кучи.


push_heap
void push_heap(_RandomAccessIterator first, _RandomAccessIterator last);
Добавление нового элемента в кучу.


sort_heap
sort_heap(_RandomAccessIterator first, _RandomAccessIterator last, _Compare comp);
Сортировка последовательности значений.


2.8.4 Класс <bitset>

Класс bitset обеспечивает операции для создания и манипуляции наборами битов. Наборы битов имеют фиксированный размер: bitset<size> b;. Операции:


set
Установка указанного бита.


reset
Сброс указанного бита.


flip
Переключает бит.


at
Получить бит.


test
Проверка бита.


size
Возвращает число битов в наборе.


count
Возвращает число установленных битов.


any
Возвращает true если хоть один бит в наборе установлен.


none
Возвращает true если не один бит в наборе неустановлен.


==, !=
Сравнение наборов битов.


&=, |=, ^ =, >>=, <<=
Битовые операции над наборами битов.


to_string
Преобразует набор битов в строку.


to_ulong
Преобразует набор битов в unsigned long.


2.8.5 Объекты-функции

Объекты-функции и адаптеры-функций предназначены для того чтобы сделать STL более гибкой. Объект-функция содержит функцию, которая может быть интерпретирована с синтаксической и семантической точки зрения как функция, использующая operator(). Объекты-функции STL:


divides<T> – арифметический;
equal_to<T> – реляционный;
greater<T> – реляционный;
greater_equal<T> – реляционный;
less<T> – реляционный;
less_equal<T> – реляционный;
logical_and<T> – логический;
logical_not<T> – логический;
logical_or<T> – логический;
minus<T> – арифметический;
moduls<T> – арифметический;
negate<T> – арифметический;
not_equal_to<T> – реляционный;
plus<T> – арифметический;
multiplies<T> – арифметический;


2.9 функции работы с памятью

calloc, malloc, free, realloc (ANSI) <stdlib.c, cstdlib>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
Распределяют и освобождают динамическую память.
calloc – выделяет блок памяти с очисткой;
malloc – выделяет блок памяти;
free – освобождает блок памяти;
realloc – меняет размер блока памяти;


delete (C++)
delete terget;
Освобождает динамическую память, выделенную с помощью оператора new. Кроме того оператор delete активизирует деструктор объекта:

target *r= new char[256]; delete r; 
target *r= new char[256]; delete []r;


memchr, memrchr (POSIX) <string.h>
void *memchr(const void *s, int c, size_t n);
void *memrchr(const void *s, int c, size_t n);
Ищет символ <c> в первых/последних <n> байтах той области памяти, на которую указывает <s>. Совпадение первого байта с <c> (представленным как беззнаковый символ) останавливает выполнение операции.


memcmp (BSD) <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
Сравнивает первые <n> байтов областей памяти <s1> и <s2>. Возвращается целое число, меньшее, большее нуля или равное ему, если определено, что <s1> меньше, больше, или равно <s2>.


memcpy (BSD) <string.h>
void *memcpy(void *dest, const void *src, size_t n);
Копирует <n> байтов из области памяти <src> в область памяти <dest>.


memmove (BSD) <string.h>
void *memmove(void *dest, const void *src, size_t n);
Копирует <n> байтов из области памяти <src> в область памяти <dest>. Области памяти могут перекрываться.


memset (BSD) <string.h>
void *memset(void *s, int c, size_t n);
Заполняет первые <n> байтов области памяти <s> байтом <c>.


mlock, munlock (POSIX) <sys/mman.h>
int mlock(const void *addr, size_t len);
int munlock(const void *addr, size_t len);
Запрещает/разрешает страничный обмен памяти в области, начинающейся с адреса <addr> длиной <len> байтов.


mlockall, munlockall (POSIX) <sys/mman.h>
int mlockall(int flags);
int munlockall(void);
Запрещает/разрешает страничный обмен для всех страниц в области памяти вызывающего процесса.


mmap, munmap (POSIX) <unistd.h, sys/mman.h>
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
mmap – возвращает адрес отражённых <length> байтов, начиная со смещения <offset> файла (или другого объекта), определённого файловым описателем <fd>, в память, начиная с адреса <start>. munmap – удаляет все отражения из заданной области памяти.


mprotect (POSIX) <sys/mman.h>
int mprotect(const void *addr, size_t len, int prot);
Контролирует доступ <prot> к области памяти <addr> <len>.


msync (POSIX) <unistd.h, sys/mman.h>
int msync(const void *start, size_t length, int flags);
Записывает на диск изменения, внесенные в файл, отраженный в память при помощи функции mmap.


new (C++)
Type *array = new Type[256];
Используется для динамического выделения памяти (для размещения объекта в свободной памяти). Указателю array присваивается адрес выделенной памяти или присваивается NULL при её отсутствии. Оператор new автоматически активизирует конструктор объекта. Если определена функция _new_handler то она вызывается при отсутствии памяти. Способы применения оператора new:

float *r = new float; delete r; 
float *r = new float(3.14); delete r; 
float *r = new float[10]; delete []r;


set_new_handler (C++) <new.h | new>
void set_new_handler(void (*VFP)());
Присваивает адресу глобальной переменной _new_handler адрес функции <VFP> обработки ошибок оператора new.


2.10 Работа с терминалом

isatty (SVID, AT&T, X/OPEN, BSD 4.3) <unistd.h>
int isatty(int desc);
Определяет, ссылается ли данный описатель на терминал.


tcgetattr, tcsetattr <termios.h, unistd.h>
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions, struct termios *termios_p);
Получить/установить атрибуты терминала.


ttyname (POSIX.1) <unistd.h>
char *ttyname(int desc);
Возвращает название терминала.


2.11 Работа с динамическими библиотеками

dlopen (*NIX) <dlfcn.h>
void *dlopen (const char *filename, int flag);
Открывает и возвращает адрес динамической библиотеки <filename> с флагами <flag>.


dlerror (*NIX) <dlfcn.h>
char *dlerror()
Возвращает текстовую строку ошибки возникшей при работе с динамической библиотекой.


dlsym (*NIX) <dlfcn.h>
void *dlsym(void *handle, char *symbol);
Получить адрес функции с именем <symbol> которая ищется в библиотеке <handle>


mycomdlclose (*NIX) <dlfcn.h>
int dlclose(void *handle);
Закрытие, ранее открытой динамической библиотеки


_init() (*NIX)
Выполняется при открытии динамической библиотеки


_fini() (*NIX)
Выполняется при закрытии динамической библиотеки


2.12 Лимитирование

getrlimit (*NIX) <sys/resource.h>
Получение различных лимитов для пользователя.


setrlimit (*NIX) <sys/resource.h>
Устанавливает различные лимиты для пользователя.


getrusage (*NIX) <sys/resource.h>
Получение различных лимитов и статистики использования ресурсов для пользователя.


ulimit (SVID) <ulimit.h>
long ulimit(int cmd, long newlimit);
Установка или определение ограничений пользователя.


2.13 Документирование и ведение логов

openlog (BSD) <syslog.h>
void openlog(char *ident, int option, int facility);
Связывает с программой <facility>, ведущей системный журнал с опциями <option>. <indent> указывает на строку идентифицирующую программу генерирующую логи.


closelog (BSD) <syslog.h>
void closelog(void);
Закрывает описатель, используемый для записи данных в журнал.


syslog (BSD) <syslog.h>
void syslog(int priority, char *format, ...);
Создает сообщение для журнала из <format>, c приоритетом <priority>.


2.14 Функции управления безопасностью

chmod, fchmod (POSIX) <sys/types.h, sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
Изменяют режим доступа к файлу, заданному параметром <path> или описателем файла <fildes>.


chown, fchown, lchown (POSIX) <sys/types.h, unistd.h>
int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
Смена владельца файла, или ссылки (lchown) на <owner> и группу <group>.


getgrnam, getgrnam_r (POSIX) <sys/types.h, pwd.h>
struct group *getgrnam(const char *name);
int getgrnam_r(const char *name, struct group *gbuf, char *buf, size_t buflen, struct group **gbufp);
Запрос записи про группу пользователей по её имени.


getgrgid, getgrgid_r (POSIX) <sys/types.h, pwd.h>
struct group *getgrgid(gid_t gid);
int getgrgid_r(gid_t gid, struct group *gbuf, char *buf, size_t buflen, struct group **gbufp);
Запрос записи про группу пользователей по её идентификатору.


getlogin, getlogin_r (POSIX) <unistd.h>
char *getlogin(void);
int getlogin_r(char *buf, size_t bufsize);
Получение имени пользователя управляющим терминалом (текущего пользователя).


getpwnam, getpwnam_r (POSIX) <sys/types.h, pwd.h>
struct passwd *getpwnam(const char *name);
int getpwnam_r(const char *name, struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp);
Запрос записи про пользователя по его имени.


getpwuid, getpwuid_r (POSIX) <sys/types.h, pwd.h>
struct passwd *getpwuid(uid_t uid);
int getpwuid_r(uid_t uid, struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp);
Запрос записи про пользователя по&n