Позволяет удобно работать с массивами и другими последовательностями: проверять, пустой ли диапазон, получать количество элементов, быстро выделять начало, конец или середину без лишней возни с указателями и копированием.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍5❤4🤝3
Безопасные альтернативы nullptr и union: optional и variant в действии!
Иногда функция не может вернуть результат — элемент не найден, ошибка загрузки, невалидный ввод. Раньше приходилось использовать
В современном C++ всё проще — используем
Проверяем, найдено ли значение, прежде чем его использовать:
Если нужно вернуть один из нескольких типов — поможет
Проверяем, какой тип находится внутри
🔥 Эти типы делают код безопаснее, понятнее и избавляют от старых хаков с
📣 C++ Ready | #практика
Иногда функция не может вернуть результат — элемент не найден, ошибка загрузки, невалидный ввод. Раньше приходилось использовать
nullptr, -1, false или магические коды. В современном C++ всё проще — используем
std::optional и std::variant.std::optional чётко указывает: значение может быть, а может и не быть.std::optional<int> find(int x) {
if (x == 42) return x;
return std::nullopt;
}Проверяем, найдено ли значение, прежде чем его использовать:
if (auto val = find(42))
std::cout << *val;
Если нужно вернуть один из нескольких типов — поможет
std::variant.std::variant<int, std::string> compute(bool ok) {
return ok ? 123 : "Ошибка";
}Проверяем, какой тип находится внутри
variant, и обрабатываем его:if (std::holds_alternative<int>(r))
std::cout << std::get<int>(r);
🔥 Эти типы делают код безопаснее, понятнее и избавляют от старых хаков с
union.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤6🔥5👎3
Показываем, как сжать и восстановить строку в памяти с использованием библиотеки zlib — простой и эффективный способ уменьшить объём данных для хранения или передачи.
Что важно:
• compressBound помогает заранее выделить буфер нужного размера.
• std::vector<uint8_t> — удобный контейнер для хранения сжатых байтов.
• Храним оригинальную длину строки, чтобы точно разжать обратно.
В примере: строка 43 байта → сжатие до 34 байт → восстановление обратно в 43 байта. Проверяем идентичность — всё работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8❤6🤝2
👋🏼 Приветствую!
Ровно год назад я создал этот канал и не только (не важно что 9 марта, главное первый пост был 8 сентября 😁).
Спасибо всем кто подписан на мои плюсы, особенно благодарю тех, кто ставит реакции.
👩💻 За это время контент намного стал лучше, с таких постов, до таких как сейчас.
Но кстати всё равно, раньше тоже круто было, можете перейти в закреп и там посмотреть на старые постики.
В общем, поздравляю сам себя с годовщиной!🥳
Ровно год назад я создал этот канал и не только (не важно что 9 марта, главное первый пост был 8 сентября 😁).
Спасибо всем кто подписан на мои плюсы, особенно благодарю тех, кто ставит реакции.
Но кстати всё равно, раньше тоже круто было, можете перейти в закреп и там посмотреть на старые постики.
В общем, поздравляю сам себя с годовщиной!
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍69❤18🔥17😁3
This media is not supported in your browser
VIEW IN TELEGRAM
На странице-теге собраны сотни лаконичных материалов: от азов STL и умных указателей до продвинутого Boost.Asio, шаблонного программирования и алгоритмов. Есть учебные проекты, интервью-шпоры и регулярные “Daily 43” задачки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥8👍4😁1
Параллельные и векторные политики позволяют разгонять вычисления без переписывания кода.
Что важно знать:
• 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