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
👩‍💻 Консольный таймер обратного отсчёта за пару строк кода!

Просим пользователя ввести количество секунд, красиво форматируем их в вид мм:сс и плавно считаем вниз до нуля, обновляя одну строку в консоли и подавая сигнал, когда время истекает.

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

Потренируешь работу с std::chrono и паузами в одну секунду;

Увидишь, как перерисовывать таймер в одной строке с помощью \r и std::flush;

Соберёшь удобный маленький инструмент, который можно встроить в любую консольную утилиту.


По ходу дела аккуратно обработаем ввод, вынесем форматирование времени в отдельную функцию и посмотрим, как легко из простого цикла сделать полезный таймер.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1410
Как отключить странные неявные преобразования?

Классический сценарий — «обёртка» над типом: валюта, температура, идентификатор.
Если сделать конструктор из базового типа неявным, компилятор начнёт автоматически конвертировать значения, и функция может внезапно принять «лишние» аргументы.

Без explicit код вроде этого компилируется без всякого шума:
struct Celsius {
double value;
Celsius(double v) : value{v} {} // неявное преобразование из double
};

void print_temperature(Celsius t);

print_temperature(36.6); // неявно создаётся Celsius{36.6}


Проблема: мы теряем контроль над тем, откуда вообще берётся Celsius, особенно когда перегрузок несколько.

С explicit всё становится предсказуемо:
struct Celsius {
double value;
explicit Celsius(double v) : value{v} {}
};

print_temperature(Celsius{36.6}); // только явное создание
// print_temperature(36.6); // больше не компилируется


🔥 Итог: помечай конструкторы и операторы преобразования как explicit,
если не хочешь, чтобы тип «магически» получался из других.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥11👍7
Нужны ChatGPT, Cursor, но дорого?

😎 Lama Agent — топовые модели (GPT-5, Claude, Gemini) внедряются прямо в IDE и пишут код за вас!
- 150 запросов в день(4500 в месяц)
- Всего за ₽699
- Доступен в ✴️ VS Code, 👩‍💻 JetBrains, ✴️ Claude Code, PyCharm

😲 Lama Bot — тг-бот с лучшими нейросетями!
- 150 запросов в день
- Всего за ₽499 в месяц (есть и бесплатные модели)
- Бери и пользуйся — быстро и без рекламы

😱 Lama AI — узнавай самым первым о последних новостях из мира AI, IT и гик индустрии. Цена — бесценно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👎4🤝3👍1🔥1
👩‍💻 Поиск без лишних циклов!

В этой шпаргалке — как заменить ручные for готовыми алгоритмами поиска из STL: находить элементы по значению или условию, быстро проверять наличие в отсортированных данных и работать с диапазонами без лишних копирований и шума в коде.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍105🤝4
Свой defer в стиле Go: выполняем код при выходе из scope!

Иногда нужно гарантированно “убраться” при выходе из функции: закрыть файл, освободить ресурс, что-то залогировать.

В Go для этого есть defer, а в C++ мы можем сделать похожее поведение через RAII и лямбды — на чистом стандарте.

Подключаем заголовки:
#include <cstdio>
#include <utility>


Сделаем небольшой helper Defer, который запоминает лямбду и вызывает её в деструкторе (то есть при выходе из области видимости):
template <typename F>
class Defer {
public:
explicit Defer(F&& f)
: func_(std::forward<F>(f)) {}
Defer(const Defer&) = delete;
Defer& operator=(const Defer&) = delete;
~Defer() {
func_();
}
private:
F func_;
};
template <typename F>
Defer<F> make_defer(F&& f) {
return Defer<F>{std::forward<F>(f)};
}


Теперь используем make_defer как “defer” — описываем, что должно выполниться при выходе из функции, и больше об этом не думаем:
int main() {
std::FILE* f = std::fopen("data.txt", "w");
if (!f) {
std::perror("fopen");
return 1;
}
auto close_file = make_defer([&] {
std::puts("closing file...");
std::fclose(f);
});
std::puts("writing...");
std::fputs("hello\n", f);
if (std::ferror(f)) {
std::puts("write error");
return 1; // defer всё равно сработает
}
std::puts("ok");
return 0; // здесь тоже автоматически закроем файл
}


При запуске увидим примерно такое:
writing...
ok
closing file...


🔥 Если же мы выйдем раньше (через return при ошибке), лямбда из make_defer всё равно вызовется — файл будет закрыт, даже если в функции несколько разных точек выхода.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥118👍4
❖ Что делать в случае отключения России от глобального Интернета?
❖ Как не сливать государству гигабайты своих данных?
❖ Как обойти «глушилку» мобильной связи в регионах?

В 2025 году любое государство готово залезть к вам в прямую кишку ради контроля персональных данных. И тендеция только набирает обороты.

Чтобы щупальца РКН, правоохранителей и мошенников не коснулись вашей жизни, держите в подписках «cybr.»

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

Сохраняйте, пока в стране во всю закручивают гайки, такие каналы — на вес золота: @cybr.
😁10🔥41👎1
👩‍💻 Когда цикл превращается в понятный поток!

Иногда тело цикла обрастает условиями и временными векторами; удобнее один раз описать шаги обработки и воспринимать их как последовательный поток.

В этом гайде:

Посмотрим, как переписать цикл в линейный конвейер;

Увидим, как ленивость избавляет от лишних аллокаций;

Разберём приём повторного использования одной цепочки шагов.


Как только начинаешь мыслить обработку данных как поток, циклы перестают пугать и начинают складываться в аккуратные, читаемые цепочки.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🤝118👍1
Как аккуратно разобрать результат функции на несколько значений?

Функции нередко возвращают несколько значений сразу: диапазон, координаты, параметры.
Классический вариант — 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 — так код становится короче и читается без расшифровки индексов.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️Слита База из 1000+ топовых курсов и материалов для айтишников

Отсортировали их для вашего удобства и выложили в телеграм-каналы по категориям:

🖥 Python — 1558+ материалов

👩‍💻 Frontend — 1241+ материалов

👩‍💻 Backend — 1095+ материалов

📊 SQL & Data — 978+ материалов

🤖 Нейросети – 855+ материалов

🎨 Веб-дизайн — 824+ материалов

📚 Книги по IT — 779+ материалов

Всё лучшее про IT бесплатно — уже на Базе 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1👎1
👩‍💻 Генератор никнеймов в стиле SilentFox42!

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

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

Увидишь, как из пары слов рождаются десятки имён;

Почувствуешь, как меняется настроение от разных сочетаний слов;

Соберёшь небольшой источник вдохновения для игр, проектов, переписок.


Если захочешь, просто добавь свои слова — и генератор начнёт говорить уже по-настоящему твоим голосом.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥2