Стандартная библиотека C++: полный обзор
Стандартная библиотека C++ (часто называемая STL — Standard Template Library) — это мощный набор шаблонных классов и функций, входящий в состав любого компилятора C++. Она предоставляет готовые, проверенные и оптимизированные решения для самых распространённых задач программирования: от работы с динамическими массивами и строками до сложных алгоритмов сортировки и поиска. Использование стандартной библиотеки значительно ускоряет разработку, повышает надёжность кода и облегчает его сопровождение.
В данной статье мы подробно разберём основные компоненты стандартной библиотеки C++: контейнеры, алгоритмы, итераторы, строки, потоки ввода/вывода и умные указатели. Каждый раздел будет сопровождаться практическими примерами кода.
Контейнеры (Containers)
Контейнеры — это классы, предназначенные для хранения и организации наборов данных. Они делятся на три основные категории:
- Последовательные контейнеры: хранят элементы в линейном порядке. Основные представители:
std::vector(динамический массив),std::list(двусвязный список),std::deque(двусторонняя очередь). - Ассоциативные контейнеры: хранят элементы в отсортированном виде, обеспечивая быстрый поиск. Примеры:
std::set(множество),std::map(словарь "ключ-значение"). - Неупорядоченные ассоциативные контейнеры (C++11): используют хеш-таблицы для ещё более быстрого доступа. Примеры:
std::unordered_set,std::unordered_map.
Пример работы с std::vector и std::map:
#include <iostream>
#include <vector>
#include <map>
#include <string>
int main() {
// Последовательный контейнер
std::vector<int> numbers = {10, 20, 30, 40};
numbers.push_back(50); // Добавление в конец
std::cout << "Вектор: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Ассоциативный контейнер
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << "Возраст Alice: " << ages["Alice"] << std::endl;
return 0;
}
Итераторы (Iterators)
Итераторы — это обобщённый способ доступа к элементам контейнера. Они работают как "умные указатели" и позволяют единообразно обходить любые контейнеры. Основные типы итераторов: begin() (указатель на первый элемент) и end() (указатель на элемент после последнего).
Пример использования итератора для обхода std::list:
#include <iostream>
#include <list>
int main() {
std::list<double> prices = {19.99, 29.99, 9.99};
// Использование итератора
for (auto it = prices.begin(); it != prices.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
Алгоритмы (Algorithms)
Библиотека <algorithm> содержит десятки готовых функций для работы с последовательностями данных: сортировка, поиск, копирование, преобразование и многое другое. Алгоритмы работают с итераторами, что делает их универсальными.
Популярные алгоритмы:
std::sort— сортировка диапазона.std::find— поиск первого вхождения значения.std::copy— копирование элементов.std::accumulate— суммирование элементов (из<numeric>).
Пример сортировки и поиска:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> data = {5, 2, 8, 1, 9};
// Сортировка по возрастанию
std::sort(data.begin(), data.end());
std::cout << "Отсортировано: ";
for (int x : data) std::cout << x << " ";
std::cout << std:: Также в библиотеке
GraphQL в C++: библиотека cppgraphqlgen для современных API
WebSocket библиотека Kotlin: ktor-client-websockets для реального времени
Отправка SMS на Swift (iOS/macOS): API MessageUI и сторонние сервисы