Иногда тело цикла обрастает условиями и временными векторами; удобнее один раз описать шаги обработки и воспринимать их как последовательный поток.
В этом гайде:
• Посмотрим, как переписать цикл в линейный конвейер;
• Увидим, как ленивость избавляет от лишних аллокаций;
• Разберём приём повторного использования одной цепочки шагов.
Как только начинаешь мыслить обработку данных как поток, циклы перестают пугать и начинают складываться в аккуратные, читаемые цепочки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🤝13❤9👍1
Как аккуратно разобрать результат функции на несколько значений?
Функции нередко возвращают несколько значений сразу: диапазон, координаты, параметры.
Классический вариант —
При чтении кода приходится постоянно держать в голове, что такое
С C++17 можно аккуратно «распаковать» результат в говорящие имена через structured bindings:
Теперь из строки сразу понятно, что вернула функция, а порядок значений фиксируется явно в одном месте.
🔥 Итог: возвращай
📣 C++ Ready | #совет
Функции нередко возвращают несколько значений сразу: диапазон, координаты, параметры.
Классический вариант —
std::tuple или std::pair, которые потом читают через std::get<0>, std::get<1> и прочую «магическую нумерацию индексов»:auto result = minmax(data);
std::cout << std::get<0>(result) << " " << std::get<1>(result); // что из этого min, а что max?
При чтении кода приходится постоянно держать в голове, что такое
0 и 1, легко перепутать порядок.С C++17 можно аккуратно «распаковать» результат в говорящие имена через structured bindings:
const auto [min, max] = minmax(data);
Теперь из строки сразу понятно, что вернула функция, а порядок значений фиксируется явно в одном месте.
std::tuple / std::pair, а на приёме сразу раскладывай их в осмысленные имена через structured bindings — так код становится короче и читается без расшифровки индексов.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍12🤝4
Собираем небольшую утилиту, которая за пару секунд придумывает десятки живых никнеймов из слов и чисел, оставляя место твоей фантазии каждый день.
В этой задаче ты:
• Увидишь, как из пары слов рождаются десятки имён;
• Почувствуешь, как меняется настроение от разных сочетаний слов;
• Соберёшь небольшой источник вдохновения для игр, проектов, переписок.
Если захочешь, просто добавь свои слова — и генератор начнёт говорить уже по-настоящему твоим голосом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥10👍6🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
На этом сайте собраны учебники и статьи по Python, JavaScript, Java, C/C++ и даже по искусственному интеллекту. Если хочешь учиться результативно, разобраться с языком или модулем — можно открыть нужную тему и идти шаг за шагом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍8❤4😁3
Ограничиваем значения аккуратно — std::clamp!
Во многих местах нужно держать значение в пределах: проценты 0–100, яркость 0–255, уровень громкости и т.п. Часто это пишут руками через
Сначала классический “ручной” вариант, который встречается в каждом втором проекте:
Теперь тот же самый смысл через
Код становится короче и выразительнее: сразу видно, что это именно ограничение диапазона, а не какая-то сложная логика.
🔥 Используй
📣 C++ Ready | #практика
Во многих местах нужно держать значение в пределах: проценты 0–100, яркость 0–255, уровень громкости и т.п. Часто это пишут руками через
if, но в C++17+ есть готовая функция std::clamp.Сначала классический “ручной” вариант, который встречается в каждом втором проекте:
int normalize_volume(int value) {
if (value < 0) value = 0;
if (value > 100) value = 100;
return value;
}Теперь тот же самый смысл через
std::clamp — читается как «ограничить value диапазоном [0, 100]»:int normalize_volume(int value) {
return std::clamp(value, 0, 100);
}std::clamp работает и с другими типами — например, можно ограничить координату по ширине окна:int clamp_x(int x, int window_width) {
return std::clamp(x, 0, window_width - 1);
}Код становится короче и выразительнее: сразу видно, что это именно ограничение диапазона, а не какая-то сложная логика.
std::clamp везде, где значения не должны “вываливаться” из диапазона — меньше кода, меньше шансов ошибиться в условиях.Please open Telegram to view this post
VIEW IN TELEGRAM
❤23🔥11👍9🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥13❤7🤝6😁1
Проверяем предположения с помощью assert!
Сейчас научимся использовать
Подключим нужную библиотеку — она уже есть в стандартной поставке:
Вставляем проверку, которая должна быть всегда верной при корректной работе программы:
Если условие внутри assert() ложно, программа остановится и покажет точку сбоя. Это помогает сразу увидеть, где нарушено предположение.
Пример с указателем:
Возможный результат при запуске (если условие нарушено):
🔥 Таким образом ты можешь на лету проверять важные условия по типу диапазонов или нулевых указателей.
📣 C++ Ready | #практика
Сейчас научимся использовать
assert() для быстрого выявления ошибок во время выполнения программы. Это пригодится при отладке и проверке логики.Подключим нужную библиотеку — она уже есть в стандартной поставке:
#include <cassert>
Вставляем проверку, которая должна быть всегда верной при корректной работе программы:
int x = getValue();
assert(x >= 0); // программа завершится, если x < 0
Если условие внутри assert() ложно, программа остановится и покажет точку сбоя. Это помогает сразу увидеть, где нарушено предположение.
Пример с указателем:
int* ptr = getPointer();
assert(ptr != nullptr); // защита от разыменования нулевого указателя
Возможный результат при запуске (если условие нарушено):
Assertion failed: ptr != nullptr, file main.cpp, line 6
🔥 Таким образом ты можешь на лету проверять важные условия по типу диапазонов или нулевых указателей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥9❤6🤝2