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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
😎 Классная статья — практическое введение в умные указатели!

В этой статье:

• Понять, зачем нужны умные указатели и автоматическое управление памятью
• Разобраться в различиях unique_ptr, shared_ptr и weak_ptr на примерах
• Научиться выбирать подходящий умный указатель и избегать типичных ошибок

🔊 Продолжай читать на Habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍94
Как перестать писать begin()/end() вручную?

Классический цикл выглядит так:
for (auto it = scores.begin(); it != scores.end(); ++it) {
std::cout << *it << '\n';
}


Здесь много «технического шума»: итераторы, begin()/end(), разыменование *it.

Range-based for делает то же самое короче и понятнее:
for (int score : scores) {
std::cout << score << '\n';
}


А если нужно менять элементы, можно сразу работать по ссылке:
for (int& score : scores) {
score += 10;
}


🔥 Итог: используй range-based for вместо явных begin()/end() — меньше шума, меньше поводов ошибиться, код читается как «пройти по всем элементам контейнера».

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝15👍104👎2😁2
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ Держите сайт Quuxplusone — Stuff mostly about C++

Блог Артура О’Дуайера, тренера и участника комитета стандартизации C++, с глубокими разборками современного C++: STL, предложения в стандарт, «тёмные уголки» языка, производительность и нетривиальные баги из реального кода.

📌 Оставляю ссылочку: quuxplusone.io

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥75👍3
👩‍💻 Консольная викторина, где слова оживают снова!

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

В этой задаче узнаешь:

Как превращать список слов в живые вопросы;

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

Что меняется, когда ответы сразу показывают твой прогресс.


Пара строк текста в файле — и у тебя есть личный учитель, который терпеливо задаёт вопросы хоть каждый день.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥95👎1🤝1
📂 Напоминалка по типам серверов в современных системах!

Например, DNS-сервер преобразует доменное имя в IP-адрес, а кеш-сервер ускоряет отдачу данных, снижая нагрузку на базу.

На картинке — фундамент серверной инфраструктуры, без которой не работает ни одно современное приложение.

Сохрани, чтобы не забыть!

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥84
Заменить значение и забрать старое — std::exchange!

Иногда нужно “переключить” переменную на новое значение и при этом сохранить старое: например, сбросить флаг, обнулить указатель, забрать ресурс у объекта. Вместо двух строк и временной переменной есть удобная функция std::exchange.

Сначала типичный “ручной” вариант:
int old = value;
value = 0;
use(old);


Теперь то же самое одной строкой: std::exchange возвращает старое значение и записывает новое:
int old = std::exchange(value, 0);
use(old);


Частый практический кейс — “забрать” указатель и обнулить его, чтобы избежать повторного использования:
T* take_ptr(T*& p) {
return std::exchange(p, nullptr);
}


И ещё один популярный пример — move-конструктор, где нужно забрать ресурс и оставить исходный объект в безопасном состоянии:
struct Buffer {
int* data = nullptr;

Buffer(Buffer&& other) noexcept
: data(std::exchange(other.data, nullptr)) {}
};


🔥 std::exchange делает намерение явным: “забрать старое, поставить новое” — меньше кода, меньше шансов забыть сбросить состояние.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥116
👩‍💻 std::string под контролем!

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

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝32🔥185👍1
👍 Отличная статья — про RAII как про дизайн-инструмент, а не только про “освободить ресурс”

В этой статье:
• Понять, как RAII помогает строить архитектуру и инварианты
• Увидеть примеры управления разными ресурсами (не только памятью)
• Научиться делать код устойчивым к исключениям и “утечкам ответственности”

🔊 Продолжай читать на Habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍65😁1
Безопасный “побитовый каст” без UB — std::bit_cast!

Иногда нужно посмотреть на биты значения: получить IEEE754-представление float, собрать/разобрать сетевой пакет, сделать хеш по битам, интерпретировать double как uint64_t.

Многие делают это через reinterpret_cast или “указательную магию” — и ловят UB из-за strict aliasing и выравнивания.

Сначала типичный “ручной” (опасный) вариант:
float f = 1.0f;
auto u = *reinterpret_cast<std::uint32_t*>(&f); // UB!
use(u);


Теперь то же самое правильно одной строкой: std::bit_cast (C++20) копирует биты между типами одинакового размера:
float f = 1.0f;
auto u = std::bit_cast<std::uint32_t>(f);
use(u);


Частый практический кейс — быстро проверить знак/экспоненту float без математики:
bool is_negative(float x) {
auto bits = std::bit_cast<std::uint32_t>(x);
return (bits >> 31) != 0;
}


Ещё один популярный пример — получить “сырой” uint64_t из double для стабильного сравнения/логирования битов:
std::uint64_t raw_bits(double d) {
return std::bit_cast<std::uint64_t>(d);
}


И обратная операция — восстановить значение из битов (тоже безопасно, если размер совпадает):
double from_bits(std::uint64_t bits) {
return std::bit_cast<double>(bits);
}


🔥 std::bit_cast делает намерение явным: “мне нужны биты, а не преобразование значения” — без reinterpret_cast, без строгого алиасинга, меньше шансов поймать UB.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥9👍5
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ USACO Guide — роадмап по олимпиадному программированию!

Бесплатный “one-stop shop” для подготовки к USACO: структурированные разделы от Intro и Bronze до Platinum/Advanced, где в каждом модуле есть объяснение темы, советы по реализации, подборка задач для практики и разборы/редакции

📌 Оставляю ссылочку: usaco.guide

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍8🔥5🤝1