TGViewer
C++ geek C++ geek @cpp_geek · 3.53K subscribers
Post #286 2.35K
🚀 Оптимизация циклов в C++: маленькие хитрости для больших скоростей

Сегодня поговорим об оптимизации циклов в C++. Даже если ваш код работает, это не значит, что он работает быстро. Давайте разберём несколько трюков, которые помогут выжать максимум из циклов.



🔥 1. Избегайте ненужных вычислений внутри цикла
❌ Плохо:

for (int i = 0; i < vec.size(); i++) {
process(vec[i]);
}

✅ Хорошо:

size_t size = vec.size();
for (size_t i = 0; i < size; i++) {
process(vec[i]);
}

Почему? vec.size() может вызываться при каждой итерации, что может замедлить выполнение, особенно если это не std::vector, а другой контейнер.



⚡ 2. Используйте reserve() для вектора
Если вы заранее знаете, сколько элементов добавите в std::vector, вызовите reserve(). Это сократит количество реаллокаций памяти.


std::vector<int> vec;
vec.reserve(1000); // резервируем место для 1000 элементов
for (int i = 0; i < 1000; i++) {
vec.push_back(i);
}




🏎️ 3. Предпочитайте range-based for
Классический цикл for:

for (size_t i = 0; i < vec.size(); i++) {
process(vec[i]);
}

Современный range-based for:

for (const auto& elem : vec) {
process(elem);
}

Плюсы:
✅ Улучшает читаемость
✅ Избегает ненужных индексаций
✅ Позволяет компилятору оптимизировать код



🔄 4. std::transform вместо for
Если вы преобразуете данные из одного контейнера в другой, используйте std::transform:


std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());

std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * 2; });

Зачем?
✔️ Работает быстрее за счёт оптимизаций
✔️ Код становится короче и читабельнее


🎯 Вывод
Оптимизация циклов — это не магия, а грамотное использование возможностей C++. Убирайте лишние вычисления, используйте reserve(), применяйте range-based for и std::transform, и ваш код станет быстрее и элегантнее.

Используете ли вы std::transform в своём коде? Делитесь в комментариях! 👇

➡️ @cpp_geek
  • 👍 19
  • ❤ 3
  • 🔥 1
  • 🥰 1
  • 👌 1
More from @cpp_geek
  1. Sep 29, 2026Dependency Injection Dependency Injection (DI) — это паттерн проектирования, который позво…
  2. Sep 24, 2026🎥 Вебинар по C++: Паттерн многопоточного программирования «Producer-Consumer» Когда неско…
  3. Sep 24, 2026Execution policy для параллельных алгоритмов Execution policy в C++ — это новшество, введе…
  4. Sep 17, 2026В чем разница между git fetch и git pull? Разница между этими командами заключается в том,…
  5. Sep 15, 2026std::tie std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргумент…
  6. Sep 11, 2026move constructor Move-конструктор — это специальный конструктор, который позволяет эффекти…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →