C/C++ Ready | Программирование
14.5K subscribers
1.1K photos
52 videos
463 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Прокачиваем свою память при помощи мини-игры "Запомни число"

Показываем числа всего на несколько секунд, стираем экран и спрашиваем одно из них, превращая обычный запуск программы в маленький тренажёр памяти.

В этой задаче:

Соберёшь короткую игру, которая проверяет внимательность и память;

Почувствуешь, как несколько секунд ожидания создают лёгкое напряжение;

Увидишь, как привычное окно превращается в маленький полигон.


А если добавить несколько раундов, игра постепенно становится привычным вечерним зарядом для мозга на каждый день.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2612🤝6
👩‍💻 Вектор под контролем!

Прокачай std::vector так, чтобы он работал на тебя, а не против. Заранее резервируй память, аккуратно вставляй и удаляй элементы, конструируй объекты прямо внутри контейнера и безболезненно ходи в C-API через data().

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🤝15👍104
Что же выведет консоль?
Anonymous Quiz
12%
A
42%
B
9%
C
37%
D
🔥12🤝6👍5😁3
👩‍💻 Как числа находят общий язык?

Расширенный подход к поиску общего делителя одновременно открывает коэффициенты, позволяющие решать уравнения и находить обратные значения без лишних вычислений и сложных обходных манёвров.

Этот алгоритм:

Находит скрытые связи между числами всего парой шагов;

Дарит обратное число, даже когда кажется невозможным;

Помогает решать линейные задачи буквально на коленке


Освоив приём, можно легко превращать трудные числовые загадки в элегантные ответы всего двумя строчками кода.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥166👍5🤝3👎2
Концепты вместо страшного SFINAE в C++ 20!

Раньше для ограничения шаблонов по типу приходилось писать SFINAE через std::enable_if и читать страшные сообщения компилятора. В C++20 появились concept и requires, которые позволяют описать те же ограничения гораздо проще и понятнее.

Сначала посмотрим на «старый» подход с std::enable_if, где функция должна работать только для целочисленных типов:
template<typename T>
std::enable_if_t<std::is_integral_v<T>, T>
sum(T a, T b) {
return a + b;
}

int main() {
auto x = sum(1, 2); // ок
auto y = sum(1.0, 2.0); // ошибка компиляции с SFINAE
}


Здесь логика «только для целочисленных типов» зашита в возвращаемый тип, сигнатура читается тяжело, а сообщение компилятора при ошибке — длинное и мало что объясняет.

Теперь опишем концепт Integral, который явно говорит: тип должен быть целочисленным:
template<typename T>
concept Integral = std::is_integral_v<T>;


Используем этот концепт в сигнатуре функции через requires — ограничим шаблон только такими типами:
template<Integral T>
T sum(T a, T b) {
return a + b;
}


И напишем простой main, где одна строка корректна, а другая ломает ограничение концепта:
int main() {
auto x = sum(1, 2); // ок, int — целочисленный тип
auto y = sum(1.0, 2.0); // ошибка: double не удовлетворяет Integral

return 0;
}


🔥 Компилятор теперь выдаёт понятное сообщение: «ограничение Integral не выполняется для double», а сама сигнатура функции читается почти как обычный текст: шаблон sum работает только для целочисленных типов.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🔥5
Как перестать писать first и second везде?

Классический код с std::pair и std::map обычно выглядит так:
for (const auto& p : scores) {
std::cout << p.first << ": " << p.second << '\n';
}


first/second ничего не говорят о смысле данных, а при чтении кода приходится всё время держать в голове, где имя, а где значение.

С C++17 можно «распаковать» пару в говорящие имена с помощью structured bindings:
for (const auto& [name, score] : scores) {
std::cout << name << ": " << score << '\n';
}


🔥 То же самое работает для std::pair, std::tuple и многих стандартных типов: можно аккуратно разобрать результат функции на несколько переменных с понятными именами.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥97👎1
👩‍💻 Когда результат может отсутствовать честно?

Иногда функция ничего не находит, но вынуждена возвращать ноль или пустую строку; удобно дать этому состоянию отдельное, явно оформленное место.

В этом гайде:

Как аккуратно выражать отсутствие результата в коде;

Простой способ избежать магических значений ошибок;

Научимся читать вызовы функций, не догадываясь по комментариям


Честно обозначенное «нет значения» делает интерфейсы проще, а ошибки поиска заметнее и предсказуемее.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1410🤝5👍4