🧰 STL: скрытые фишки стандартной библиотеки C++
STL — это не только vector и map. Разбираем полезные, но редко используемые инструменты вроде transform, accumulate, variant, ranges.
Стандартная библиотека C++ — это мощнейший инструмент, который часто недооценивают. Все знают про vector
, map
и string
, но STL (Standard Template Library) — это не только про базовые контейнеры.
Сегодня Кодик покажет малоизвестные, но чертовски полезные фишки STL, которые прокачают твой код, сделают его чище и короче 💪

🔍 1. std::accumulate
— компактная агрегация
Вместо ручного цикла для подсчёта суммы чисел:
int sum = 0;
for (int x : v) sum += x;
Можно просто:
#include <numeric>
int sum = std::accumulate(v.begin(), v.end(), 0);
🌀 2. std::transform
— функциональный подход
Нужно применить операцию к каждому элементу? Не пиши цикл — используй transform
:
std::vector<int> result;
std::transform(v.begin(), v.end(), std::back_inserter(result), [](int x) {
return x * 2;
});
🧩 3. std::any
и std::variant
— хранение любых типов
std::variant<int, std::string> val = "Привет";
if (std::holds_alternative<std::string>(val)) {
std::cout << std::get<std::string>(val);
}
🧱 4. std::unordered_map
и std::unordered_set
— мощь хэш-таблиц
Когда ты используешь обычные std::map
и std::set
, под капотом работает сбалансированное бинарное дерево (обычно красно-черное дерево). Это означает, что операции вставки, поиска и удаления занимают O(log n)
времени.
А вот std::unordered_map
и std::unordered_set
устроены по-другому: они используют хэш-таблицы. За счёт этого они обеспечивают среднюю сложность операций — O(1)
. Это делает их намного быстрее в большинстве прикладных задач, особенно при большом объёме данных.
🔥 Пример:
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
std::unordered_map<std::string, int> scores;
scores["Alice"] = 90;
scores["Bob"] = 75;
std::cout << scores["Alice"]; // 90
}
В отличие от std::map
, unordered_map
не гарантирует порядок элементов. Если тебе не важно, в каком порядке хранятся данные, — используй unordered_
-версии для максимальной производительности.
🧠 Когда использовать?
Нужно сохранить порядок? | Используй |
---|---|
Да |
|
Нет |
|
🧵 5. std::ranges
(начиная с C++20)
#include <ranges>
auto result = v
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });
Позволяет писать цепочки операций — красиво и компактно.
🤯 Бонус: что ещё есть в STL
std::optional
— безопасная альтернатива "магическим значениям"std::span
— удобная передача диапазоновstd::bitset
— компактная работа с флагамиstd::invoke
— вызов любых функций, включая member-функции
Если хочешь научиться использовать STL в реальных задачах — скачай приложение Кодик. Там тебя ждут:
🧠 Интерактивные уроки по C++
✅ Упражнения с проверкой решений
💬 Сообщество разработчиков
Учись программировать не один — а с поддержкой и нашим Telegram-каналом 💙