Стандартная библиотека C++: полный обзор возможностей

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Стандартная библиотека C++ (STL): полный обзор

Стандартная библиотека C++ (часто называемая STL — Standard Template Library) — это мощный набор шаблонных классов и функций, который является неотъемлемой частью любого компилятора C++. Она предоставляет разработчику готовые, проверенные и высокоэффективные решения для большинства повседневных задач: от работы с коллекциями данных до сложных алгоритмов и ввода-вывода. Изучение STL — ключевой шаг в освоении современного C++.

В этой статье мы подробно разберем основные компоненты стандартной библиотеки, их назначение и приведем практические примеры использования.

1. Контейнеры (Containers)

Контейнеры — это структуры данных, предназначенные для хранения коллекций объектов. Все контейнеры являются шаблонными классами, что позволяет хранить элементы любого типа.

  • Последовательные контейнеры: хранят элементы в линейном порядке.
    • std::vector — динамический массив. Быстрый доступ по индексу, вставка/удаление в конце — O(1), в середине — O(n).
    • std::list — двусвязный список. Быстрая вставка/удаление в любом месте, но нет прямого доступа по индексу.
    • std::deque — двусторонняя очередь. Быстрая вставка/удаление как в начале, так и в конце.
    • std::array — статический массив фиксированного размера (C++11).
  • Ассоциативные контейнеры: хранят элементы в отсортированном порядке (обычно на основе красно-черных деревьев).
    • std::set — множество уникальных элементов.
    • std::map — словарь (ассоциативный массив) пар "ключ-значение".
    • std::multiset / std::multimap — аналоги, допускающие дубликаты.
  • Неупорядоченные ассоциативные контейнеры (C++11): используют хеш-таблицы.
    • std::unordered_set, std::unordered_map — быстрый доступ в среднем за O(1).
  • Адаптеры контейнеров: предоставляют ограниченный интерфейс на основе другого контейнера.
    • std::stack (LIFO), std::queue (FIFO), std::priority_queue (с приоритетом).

Пример использования std::vector:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {10, 20, 30, 40, 50};
    numbers.push_back(60); // Добавляем элемент в конец
    
    for (int n : numbers) {
        std::cout << n << " ";
    }
    // Вывод: 10 20 30 40 50 60
    return 0;
}

2. Итераторы (Iterators)

Итераторы — это обобщенные указатели, которые позволяют перебирать элементы любого контейнера единообразным способом. Они являются связующим звеном между контейнерами и алгоритмами.

  • Категории итераторов: Input, Output, Forward, Bidirectional, Random Access.
  • begin() / end() — возвращают итераторы на первый и последний+1 элемент.
  • std::advance() — перемещает итератор на N позиций.
  • std::distance() — вычисляет расстояние между двумя итераторами.

Пример с итераторами:

#include <iostream>
#include <vector>

int main() {
    std::vector<std::string> words = {"Hello", "World", "C++"};
    
    for (auto it = words.begin(); it != words.end(); ++it) {
        std::cout << *it << " ";
    }
    // Вывод: Hello World C++
    return 0;
}

3. Алгоритмы (Algorithms)

Библиотека <algorithm> содержит более 100 шаблонных функций, реализующих различные операции над диапазонами данных. Алгоритмы работают с итераторами, что делает их универсальными.

Рекомендаций