Перейти к основному содержимому

5.06. Встроенные функции в C++

Разработчику Архитектору

Встроенные функции в C++

В языке C++ отсутствуют встроенные функции в классическом понимании интерпретируемых языков. Основу функциональности составляют функции стандартной библиотеки C и C++, а также компиляторные внутренние функции. Справочник охватывает наиболее часто применяемые утилиты, сгруппированные по категориям использования.

Управление выполнением программы

ФункцияЗначениеПример
exitНемедленное завершение программы с возвратом кода состояния операционной системеexit(EXIT_SUCCESS);
abortАварийное завершение программы без вызова деструкторов объектовabort();
atexitРегистрация функции для вызова при нормальном завершении программыatexit(cleanup_function);
quick_exitБыстрое завершение программы с минимальной очисткой ресурсовquick_exit(EXIT_FAILURE);
at_quick_exitРегистрация функции для вызова при быстром завершении программыat_quick_exit(log_shutdown);

Работа с памятью

ФункцияЗначениеПример
mallocВыделение блока памяти указанного размера без инициализацииvoid* ptr = malloc(100);
callocВыделение и обнуление блока памяти для заданного количества элементовint* arr = (int*)calloc(10, sizeof(int));
reallocИзменение размера ранее выделенного блока памятиptr = realloc(ptr, 200);
freeОсвобождение ранее выделенного блока памятиfree(ptr);
memcpyКопирование байтов из одного блока памяти в другойmemcpy(dest, src, size);
memmoveКопирование байтов с корректной обработкой перекрывающихся областейmemmove(dest, src, size);
memsetЗаполнение блока памяти заданным значениемmemset(buffer, 0, 1024);

Математические функции

ФункцияЗначениеПример
absВычисление абсолютного значения целого числаint x = abs(-42);
fabsВычисление абсолютного значения числа с плавающей точкойdouble y = fabs(-3.14);
sqrtВычисление квадратного корняdouble r = sqrt(16.0);
powВозведение числа в степеньdouble p = pow(2.0, 8.0);
sinВычисление синуса угла в радианахdouble s = sin(M_PI / 2);
cosВычисление косинуса угла в радианахdouble c = cos(0.0);
tanВычисление тангенса угла в радианахdouble t = tan(M_PI / 4);
logВычисление натурального логарифмаdouble l = log(2.71828);
log10Вычисление десятичного логарифмаdouble d = log10(1000.0);
ceilОкругление числа вверх до ближайшего целогоdouble u = ceil(3.14);
floorОкругление числа вниз до ближайшего целогоdouble d = floor(3.99);
roundОкругление числа до ближайшего целого по правилам математикиdouble r = round(3.5);

Строковые функции

ФункцияЗначениеПример
strlenОпределение длины нуль-терминированной строкиsize_t len = strlen("hello");
strcpyКопирование одной строки в другуюstrcpy(dest, "source");
strncpyКопирование с ограничением максимального количества символовstrncpy(dest, src, 10);
strcatКонкатенация двух строкstrcat(dest, " suffix");
strncatКонкатенация с ограничением количества добавляемых символовstrncat(dest, src, 5);
strcmpСравнение двух строк лексикографическиint cmp = strcmp(a, b);
strncmpСравнение с ограничением количества сравниваемых символовint cmp = strncmp(a, b, 3);
strchrПоиск первого вхождения символа в строкеchar* p = strchr(str, 'a');
strstrПоиск подстроки внутри строкиchar* p = strstr(haystack, needle);
atoiПреобразование строки в целое числоint n = atoi("42");
atofПреобразование строки в число с плавающей точкойdouble d = atof("3.14");

Ввод и вывод данных

ФункцияЗначениеПример
printfФорматированный вывод данных в стандартный потокprintf("Value: %d\n", 42);
scanfФорматированный ввод данных из стандартного потокаscanf("%d", &value);
fprintfФорматированный вывод в файловый потокfprintf(file, "Error: %s", msg);
fscanfФорматированный ввод из файлового потокаfscanf(file, "%d", &value);
sprintfФорматированный вывод в строковый буферsprintf(buffer, "ID: %04d", id);
snprintfБезопасный форматированный вывод с ограничением длиныsnprintf(buf, size, "Data: %s", input);
fopenОткрытие файла для чтения или записиFILE* f = fopen("data.txt", "r");
fcloseЗакрытие ранее открытого файлаfclose(file);
freadЧтение блока данных из файлаfread(buffer, 1, 1024, file);
fwriteЗапись блока данных в файлfwrite(data, sizeof(int), 10, file);
fflushСброс буфера вывода на устройствоfflush(stdout);

Функции преобразования и утилиты

ФункцияЗначениеПример
sizeofОператор определения размера типа или объекта в байтахsize_t s = sizeof(int);
typeidПолучение информации о типе во время выполненияconst type_info& ti = typeid(obj);
offsetofВычисление смещения поля внутри структурыsize_t off = offsetof(struct_t, field);
qsortСортировка массива с использованием пользовательской функции сравненияqsort(arr, 10, sizeof(int), compare);
bsearchБинарный поиск элемента в отсортированном массивеvoid* p = bsearch(key, arr, 10, sizeof(int), compare);
timeПолучение текущего календарного времениtime_t now = time(NULL);
clockИзмерение процессорного времени выполнения программыclock_t start = clock();
randГенерация псевдослучайного целого числаint r = rand() % 100;
srandИнициализация генератора псевдослучайных чиселsrand(time(NULL));

Функции и методы стандартной библиотеки C++ (STL)

Контейнеры: общие методы

МетодЗначениеПример
sizeВозвращает количество элементов в контейнереsize_t n = vec.size();
emptyПроверяет, пуст ли контейнерif (vec.empty()) { /* ... */ }
clearУдаляет все элементы из контейнераvec.clear();
beginВозвращает итератор на первый элементauto it = vec.begin();
endВозвращает итератор на позицию после последнего элементаauto it = vec.end();
frontДоступ к первому элементу контейнераint first = vec.front();
backДоступ к последнему элементу контейнераint last = vec.back();

Вектор и динамические массивы

Функция / методЗначениеПример
vectorШаблонный класс динамического массиваstd::vector<int> v;
push_backДобавление элемента в конец вектораv.push_back(42);
pop_backУдаление последнего элемента вектораv.pop_back();
resizeИзменение размера вектораv.resize(100);
reserveРезервирование памяти без изменения размераv.reserve(1000);
capacityТекущая ёмкость выделенной памятиsize_t cap = v.capacity();
shrink_to_fitСокращение ёмкости до размера контейнераv.shrink_to_fit();

Строки и строковые операции

Функция / методЗначениеПример
stringКласс для работы со строкамиstd::string s = "text";
lengthВозвращает длину строкиsize_t len = s.length();
substrИзвлечение подстрокиstd::string sub = s.substr(0, 4);
findПоиск подстроки или символаsize_t pos = s.find("abc");
replaceЗамена части строкиs.replace(0, 3, "new");
appendДобавление текста в конец строкиs.append(" more");
c_strПолучение указателя на C-строкуconst char* p = s.c_str();
to_stringПреобразование числа в строкуstd::string num = std::to_string(42);
stoiПреобразование строки в целое числоint n = std::stoi("42");
stodПреобразование строки в число с плавающей точкойdouble d = std::stod("3.14");

Алгоритмы стандартной библиотеки

ФункцияЗначениеПример
sortСортировка диапазона элементовstd::sort(vec.begin(), vec.end());
reverseРазворот последовательностиstd::reverse(arr, arr + n);
findПоиск значения в диапазонеauto it = std::find(v.begin(), v.end(), 42);
countПодсчёт вхождений значенияint c = std::count(v.begin(), v.end(), 5);
copyКопирование диапазонаstd::copy(src, src + n, dest);
fillЗаполнение диапазона значениемstd::fill(arr, arr + 10, 0);
max_elementПоиск максимального элементаauto it = std::max_element(v.begin(), v.end());
min_elementПоиск минимального элементаauto it = std::min_element(v.begin(), v.end());
accumulateСуммирование элементов диапазонаint sum = std::accumulate(v.begin(), v.end(), 0);
transformПрименение функции к каждому элементуstd::transform(v.begin(), v.end(), v.begin(), f);

Потоки ввода-вывода

Объект / функцияЗначениеПример
cinСтандартный поток вводаstd::cin >> value;
coutСтандартный поток выводаstd::cout << "text";
cerrСтандартный поток ошибокstd::cerr << "error";
getlineЧтение строки из потокаstd::getline(std::cin, str);
ifstreamПоток для чтения из файлаstd::ifstream f("in.txt");
ofstreamПоток для записи в файлstd::ofstream f("out.txt");
stringstreamПоток для работы со строкамиstd::stringstream ss; ss << 42;

Управление исключениями

КонструкцияЗначениеПример
tryБлок кода с возможными исключениямиtry { /* ... */ }
catchОбработка перехваченного исключенияcatch (const std::exception& e) { }
throwГенерация исключенияthrow std::runtime_error("msg");
noexceptСпецификатор отсутствия исключенийvoid f() noexcept { }

Утилиты и вспомогательные функции

Функция / шаблонЗначениеПример
autoАвтоматический вывод типа переменнойauto x = 42;
nullptrТипобезопасный нулевой указательint* p = nullptr;
sizeofОператор определения размера в байтахsize_t s = sizeof(int);
decltypeВывод типа выраженияdecltype(x) y = x;
moveПревращение объекта в rvalue для перемещенияstd::vector<int> v2 = std::move(v1);
swapОбмен значениями двух объектовstd::swap(a, b);
make_uniqueСоздание умного указателя unique_ptrauto p = std::make_unique<int>(42);
make_sharedСоздание умного указателя shared_ptrauto p = std::make_shared<int>(42);

Многопоточность и синхронизация

Функция / классЗначениеПример
threadСоздание и управление потоком выполненияstd::thread t(worker_function);
joinОжидание завершения потокаt.join();
detachОтделение потока для независимого выполненияt.detach();
mutexБазовый мьютекс для защиты разделяемых данныхstd::mutex m; m.lock();
lock_guardRAII-обёртка для автоматической блокировки мьютексаstd::lock_guard<std::mutex> lock(m);
unique_lockГибкая блокировка мьютекса с отложенной блокировкойstd::unique_lock<std::mutex> lock(m, std::defer_lock);
condition_variableУсловная переменная для синхронизации потоковcv.wait(lock, []{ return ready; });
notify_oneПробуждение одного ожидающего потокаcv.notify_one();
notify_allПробуждение всех ожидающих потоковcv.notify_all();
atomicАтомарные операции без блокировокstd::atomic<int> counter(0); counter++;
futureПолучение результата асинхронной операцииstd::future<int> f = std::async(task);
promiseУстановка значения для связанного futurestd::promise<int> p; p.set_value(42);
asyncЗапуск функции асинхронноauto f = std::async(std::launch::async, calc);

Работа со временем

Функция / классЗначениеПример
chrono::system_clockСтенное время системыauto now = std::chrono::system_clock::now();
chrono::steady_clockМонотонные часы для измерения интерваловauto start = std::chrono::steady_clock::now();
chrono::durationПредставление временного интервалаstd::chrono::seconds s(5);
chrono::time_pointТочка во времениstd::chrono::time_point tp = clock::now();
this_thread::sleep_forПриостановка текущего потока на интервалstd::this_thread::sleep_for(100ms);
this_thread::sleep_untilПриостановка до заданного момента времениstd::this_thread::sleep_until(wakeup_time);
time_tТип для представления календарного времениtime_t t = time(nullptr);
localtimeПреобразование time_t в локальное времяtm* lt = localtime(&t);
gmtimeПреобразование time_t в время UTCtm* utc = gmtime(&t);
mktimeПреобразование структуры tm в time_ttime_t t = mktime(&tm_struct);

Умные указатели

Функция / классЗначениеПример
unique_ptrУникальное владение объектомstd::unique_ptr<int> p(new int(42));
shared_ptrСовместное владение с подсчётом ссылокstd::shared_ptr<int> p = std::make_shared<int>(42);
weak_ptrНенаблюдательная ссылка на объект shared_ptrstd::weak_ptr<int> wp = sp;
make_uniqueБезопасное создание unique_ptr (C++14)auto p = std::make_unique<MyClass>();
make_sharedЭффективное создание shared_ptrauto p = std::make_shared<std::vector<int>>(10);
resetОсвобождение управляемого объектаp.reset();
getПолучение сылки на управляемый объектint* raw = p.get();
use_countТекущее количество владельцев shared_ptrlong n = sp.use_count();
expiredПроверка, указывает ли weak_ptr на живой объектif (wp.expired()) { /* объект уничтожен */ }
lockПреобразование weak_ptr в shared_ptrauto sp = wp.lock();

Функциональные объекты и утилиты

Функция / классЗначениеПример
functionОбобщённая обёртка для вызываемых объектовstd::function<int(int)> f = square;
bindЧастичное применение аргументов функцииauto f = std::bind(add, _1, 10);
refОбёртка для передачи аргумента по ссылкеstd::ref(value)
crefОбёртка для передачи константной ссылкиstd::cref(const_value)
moveПриведение к rvalue для перемещенияstd::move(obj)
forwardИдеальная передача аргументовstd::forward<T>(arg)
pairКонтейнер для двух значенийstd::pair<int, string> p(42, "text");
make_pairСоздание пары без указания типовauto p = std::make_pair(42, "text");
tupleКонтейнер для фиксированного числа значенийstd::tuple<int, double, string> t(1, 2.0, "s");
getДоступ к элементу кортежа по индексуint x = std::get<0>(t);
tieРаспаковка кортежа в отдельные переменныеstd::tie(a, b) = get_values();
optionalПредставление опционального значения (C++17)std::optional<int> o = 42;
nulloptОтсутствие значения для optionalstd::optional<int> empty = std::nullopt;
variantТипобезопасный объединённый тип (C++17)std::variant<int, string> v = "text";
visitПрименение функции к значению variantstd::visit(visitor, v);

Работа с файловой системой (C++17)

Функция / классЗначениеПример
filesystem::pathПредставление пути к файлу или каталогуstd::filesystem::path p("/home/user");
existsПроверка существования файла или каталогаif (std::filesystem::exists(p)) { }
is_directoryПроверка, является ли путь каталогомbool dir = std::filesystem::is_directory(p);
is_regular_fileПроверка, является ли путь обычным файломbool file = std::filesystem::is_regular_file(p);
create_directoryСоздание каталогаstd::filesystem::create_directory("new_dir");
removeУдаление файла или пустого каталогаstd::filesystem::remove("file.txt");
remove_allРекурсивное удаление каталога со всем содержимымstd::filesystem::remove_all("dir");
copyКопирование файла или каталогаstd::filesystem::copy(src, dst);
renameПереименование или перемещение файлаstd::filesystem::rename(old, new);
file_sizeПолучение размера файла в байтахuintmax_t size = std::filesystem::file_size(p);
current_pathПолучение или установка текущего рабочего каталогаauto cwd = std::filesystem::current_path();
absoluteПреобразование пути в абсолютныйauto abs = std::filesystem::absolute(p);
canonicalПолучение канонического пути без символических ссылокauto canon = std::filesystem::canonical(p);
directory_iteratorИтератор по содержимому каталогаfor (auto& e : std::filesystem::directory_iterator("."))
recursive_directory_iteratorРекурсивный итератор по дереву каталоговfor (auto& e : std::filesystem::recursive_directory_iterator("."))

Исключения стандартной библиотеки

Класс исключенияЗначениеПример перехвата
exceptionБазовый класс всех исключенийcatch (const std::exception& e)
logic_errorОшибки логики программыcatch (const std::logic_error& e)
invalid_argumentПередан недопустимый аргументthrow std::invalid_argument("msg");
out_of_rangeВыход за границы диапазонаthrow std::out_of_range("index");
runtime_errorОшибки времени выполненияcatch (const std::runtime_error& e)
range_errorОшибка диапазона числового значенияthrow std::range_error("value");
overflow_errorАрифметическое переполнениеthrow std::overflow_error("calc");
underflow_errorАрифметическое исчезновение порядкаthrow std::underflow_error("calc");
bad_allocНеудачное выделение памятиcatch (const std::bad_alloc& e)
bad_castНекорректное преобразование dynamic_castcatch (const std::bad_cast& e)
bad_typeidИспользование typeid с нулевым указателемcatch (const std::bad_typeid& e)
bad_function_callВызов пустого std::functioncatch (const std::bad_function_call& e)
bad_weak_ptrСоздание shared_ptr из expired weak_ptrcatch (const std::bad_weak_ptr& e)
system_errorОшибки системного уровняcatch (const std::system_error& e)
ios_base::failureОшибки потоков ввода-выводаcatch (const std::ios_base::failure& e)

Локализация и локали

Класс / функцияЗначениеПример
localeПредставление локали для форматированияstd::locale loc("ru_RU.UTF-8");
imbueУстановка локали для потокаstd::cout.imbue(loc);
toupperПреобразование символа в верхний регистр по локалиchar c = std::toupper('a', loc);
tolowerПреобразование символа в нижний регистр по локалиchar c = std::tolower('A', loc);
isdigitПроверка цифрового символа по локалиbool d = std::isdigit('5', loc);
numpunctФасет для форматирования чиселstd::numpunct<char>
time_getФасет для разбора даты и времениstd::time_get<char>
time_putФасет для форматирования даты и времениstd::time_put<char>
codecvtПреобразование между кодировкамиstd::codecvt_utf8<wchar_t>