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

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

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

Начать курс

Стандартная библиотека 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::                    

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