Стандартная библиотека C++: полный обзор
Стандартная библиотека C++ (C++ Standard Library) — это мощный набор классов, функций, макросов и шаблонов, который поставляется вместе с любым компилятором C++. Она предоставляет готовые решения для большинства типовых задач: от работы с контейнерами данных до сетевого взаимодействия и многопоточности. В этой статье мы разберём основные компоненты библиотеки, покажем примеры кода и объясним, как эффективно использовать её возможности.
Основные компоненты стандартной библиотеки
Стандартная библиотека делится на несколько крупных разделов:
- STL (Standard Template Library) — контейнеры, итераторы, алгоритмы и функциональные объекты.
- Ввод/вывод — потоки (
iostream), файловые потоки (fstream), строковые потоки (sstream). - Строки — класс
std::stringиstd::string_view. - Числовые операции — математические функции (
cmath), случайные числа (random), комплексные числа (complex). - Многопоточность — потоки (
thread), мьютексы, условные переменные. - Утилиты —
std::optional,std::variant,std::any, умные указатели (shared_ptr,unique_ptr).
Контейнеры STL
Контейнеры — это шаблонные классы, предназначенные для хранения коллекций объектов. Они делятся на последовательные и ассоциативные.
Последовательные контейнеры
std::vector— динамический массив. Быстрый доступ по индексу, медленная вставка в середину.std::deque— двусторонняя очередь. Быстрая вставка/удаление с обоих концов.std::list— двусвязный список. Быстрая вставка/удаление в любом месте, но медленный доступ по индексу.
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {10, 20, 30, 40};
numbers.push_back(50); // Добавление в конец
for (int n : numbers) {
std::cout << n << " ";
}
return 0;
}
Ассоциативные контейнеры
std::set— множество уникальных элементов (отсортировано).std::map— словарь «ключ-значение» (отсортировано по ключу).std::unordered_set/std::unordered_map— хеш-таблицы (не сортированы, но быстрее).
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
for (const auto& [name, age] : ages) {
std::cout << name << ": " << age << std::endl;
}
return 0;
}
Алгоритмы
Библиотека <algorithm> содержит более 100 алгоритмов для работы с последовательностями: сортировка, поиск, копирование, трансформация и т.д. Все алгоритмы работают через итераторы, что делает их универсальными.
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v = {5, 2, 8, 1, 9};
std::sort(v.begin(), v.end()); // Сортировка по возрастанию
auto it = std::find(v.begin(), v.end(), 8);
if (it != v.end()) {
std::cout << "Найдено: " << *it << std::endl;
}
return 0;
}
Работа со строками
Класс std::string предоставляет удобные методы для работы с текстом: поиск, замена, конкатенация, сравнение. В C++17 добавлен std::string_view для невладеющего просмотра строк.
#include <iostream>
#include <string>
int main() {
std::string text = "Hello, C++ World!";
size_t pos = text.find("C++");
if (pos !=