Параллельные и векторные политики позволяют разгонять вычисления без переписывания кода.
Что важно знать:
• par — для CPU-bound задач;
• par_unseq — многопоточность + SIMD;
• прирост заметен на больших массивах.
Параллельные алгоритмы STL — это ускорение «по щелчку» без ручного TBB или OpenMP.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤9👍4
std::expected в C++23: элегантные ошибки без try/catch!
Когда нужен результат или описание проблемы, а ради одной-двух проверок не хочется плодить исключения — новый шаблон
Напишем функцию, которая парсит число из строки и сообщает об ошибке текстом:
Используем результат без исключений и без
🔥 Результат: одно и то же выражение возвращает либо готовый
📣 C++ Ready | #практика
Когда нужен результат или описание проблемы, а ради одной-двух проверок не хочется плодить исключения — новый шаблон
std::expected<T,E> приходит на помощь.Напишем функцию, которая парсит число из строки и сообщает об ошибке текстом:
std::expected<int, std::string> parse_int(std::string_view s) {
int value{};
auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), value);
if (ec == std::errc{})
return value; expected<int>
return std::unexpected("Не число");
}Используем результат без исключений и без
bool-флагов:auto n = parse_int("42");
if (n) { // аналог has_value()
std::cout << "OK: " << *n << '\n';
} else {
std::cout << "Ошибка: " << n.error() << '\n';
}🔥 Результат: одно и то же выражение возвращает либо готовый
int, либо понятное сообщение об ошибке — чёткое API и ноль накладных расходов на механизм исключений.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥8👍5
Она позволяет атомарно записывать и считывать значения, обменивать их и возвращать прежнее, условно изменять содержимое с возможностью или без возможности ложного отказаPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤5👍4👎1🤝1
👍9🔥4❤2👎1
Он помогает выбрать лучший набор вещей, не перегружая сумку. Всё это достигается быстрым перебором возможных сочетаний!
Ключевые моменты:
• Оцениваем пользу каждого предмета и его тяжесть;
• Постепенно собираем сумку, пробуя тяжёлые варианты позже;
• Запоминаем лучшие итоги, избегая лишних пересчётов и хранения.
Рюкзак показывает, как извлечь максимум пользы из ограниченного веса, оставаясь в рамках бюджета возможностей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤6👍4🤝1
Пользовательские аллокаторы в STL: управляем памятью сами!
Иногда нужен точный контроль за выделением памяти — например, чтобы логировать аллокации или запитывать контейнеры из собственного буфера.
Для этого стандартные контейнеры C++ позволяют подставить свой аллокатор.
Создадим минимальный аллокатор с логированием:
Теперь подключим аллокатор к контейнеру:
🔥 Результат: контейнер логирует каждое выделение и освобождение памяти, позволяя внедрять кастомные стратегии без глобальной подмены
📣 C++ Ready | #практика
Иногда нужен точный контроль за выделением памяти — например, чтобы логировать аллокации или запитывать контейнеры из собственного буфера.
Для этого стандартные контейнеры C++ позволяют подставить свой аллокатор.
Создадим минимальный аллокатор с логированием:
template <typename T>
struct LoggingAllocator {
using value_type = T;
T* allocate(std::size_t n) {
std::cout << "alloc " << n << '\n';
return static_cast<T*>(::operator new(n * sizeof(T)));
}
void deallocate(T* p, std::size_t) noexcept {
std::cout << "free\n";
::operator delete(p);
}
};
allocate выводит сообщение и выделяет память обычным способом; deallocate симметрично освобождает её.Теперь подключим аллокатор к контейнеру:
std::vector<int, LoggingAllocator<int>> v;
v.push_back(1); // → alloc 1
v.push_back(2); // → alloc 2
🔥 Результат: контейнер логирует каждое выделение и освобождение памяти, позволяя внедрять кастомные стратегии без глобальной подмены
new/delete.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥6
Мини-утилита отправляет один запрос к открытому сервису, получает строку с адресом и выводит её — быстро, компактно и без сложных зависимостей.
Основные моменты:
• Один запрос сразу сообщает внешний адрес без лишних шагов;
• Зависимости не нужны, код переносится между проектами легко;
• Обработка ошибок бережёт программу от временных сетевых сбоев.
Такой подход удобен для диагностики, логирования и маленьких CLI-инструментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍11❤5