Параллельное суммирование с std::reduce и execution::par!
Если у тебя есть большой массив чисел, и ты хочешь быстро посчитать сумму — не обязательно делать это поэлементно в одном потоке.
С++ даёт инструмент из коробки —
Подключим нужные заголовки:
Теперь создадим данные и посчитаем сумму:
🔥 Без лишних потоков, блокировок и циклов ты получаешь прирост производительности на больших объёмах.
📣 C++ Ready | #практика
Если у тебя есть большой массив чисел, и ты хочешь быстро посчитать сумму — не обязательно делать это поэлементно в одном потоке.
С++ даёт инструмент из коробки —
std::reduce с флагом std::execution::par, который распараллеливает работу по ядрам.Подключим нужные заголовки:
#include <numeric>
#include <execution>
#include <vector>
#include <iostream>
Теперь создадим данные и посчитаем сумму:
std::vector<int> data(1'000'000, 1);
int total = std::reduce(
std::execution::par,
data.begin(), data.end()
);
std::cout << "Сумма: " << total << '\n';
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥8👍5
Бинарный метод делит показатель степени и ускоряет вычисления до log-шагов.
Что важно знать:
• Делим степень пополам;
• Используем остаток от деления;
• Подходит для модулей.
Надёжный шаблон, необходимый в крипте, теории чисел и задачах с модульными вычислениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19🤝9❤4👍3
Они позволяют вставлять данные в контейнеры или читать из потока одной строкой без циклов.
Что важно знать:
• Подстраиваются под контейнер;
• Подходят для потоков;
• Упрощают алгоритмы STL.
Убирают лишний код и делают стандартные алгоритмы удобными даже для нестандартных случаев.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤11👍4🤝2
40 строк кода превращают JSON-расписание в работающий планировщик, который тихо запускает ваши скрипты вовремя.
Что важно знать:
• Один файл исходника;
• Любой POSIX-шёлл;
• Работает офлайн.
Расширяйте проект: добавьте дни недели, параллельный запуск и логирование, чтобы автоматизация стала гибче и надёжней.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4👍3🤝1
В этой статье:
• Идея и подготовка турнира: цели, формат, инструменты и задачи.• Организация процесса: поиск участников и оформление презентаций• Проведение и итоги: отборочный и финальный этапы, выводы и будущее.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤15🔥6👍4👎1
std::optional как альтернатива «магическим» значениям!
Иногда функции возвращают
C++ предлагает более безопасный способ —
Определим функцию find_index, возвращающую std::optional<size_t>
Используем эту функцию в main и обрабатываем результат
🔥
📣 C++ Ready | #практика
Иногда функции возвращают
-1, 0 или nullptr, чтобы указать «нет результата» — и вы потом годами отлавливаете баги, когда забыли проверить этот «волшебный» код.C++ предлагает более безопасный способ —
std::optional<T>. Вместо -1 или nullptr вы явно показываете, что результат может отсутствовать, и заставляете пользователей API проверять это.Определим функцию find_index, возвращающую std::optional<size_t>
std::optional<size_t> find_index(const std::vector<int>& v, int x) {
for (size_t i = 0; i < v.size(); ++i)
if (v[i] == x)
return i; // нашли — возвращаем индекс
return {}; // не нашли — пустой optional
}Используем эту функцию в main и обрабатываем результат
int main() {
std::vector<int> data = {10, 20, 30};
if (auto idx = find_index(data, 20)) {
std::cout << "Найдено в позиции " << *idx << "\n";
} else {
std::cout << "Элемент не найден\n";
}
}std::optional делает код самодокументируемым, избавляет от «магических» значений и принуждает явно обрабатывать отсутствие результата.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤9🔥4
Используй
std::variant — безопасную и современную замену union, которая может хранить значения разных типов одновременно, но только одно за раз.В примере
get_value() возвращает либо int, либо std::string, а std::visit вызывает нужный обработчик в зависимости от типа.Полная безопасность типов на этапе компиляции, без
if-ов, switch-ей и dynamic_cast.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥7❤5