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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻auto и вывод типов без лишней путаницы!

В этой шпаргалке — простое объяснение того, как C++ выводит типы при объявлении переменных: когда ты неожиданно получаешь копию вместо ссылки, как безопасно “подцепить” объект без лишнего копирования

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍54🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
👍 OverAPI — огромная база шпаргалок для программистов!

Здесь можно быстро найти краткие справочники по синтаксису, командам и ключевым возможностям разных языков, чтобы не тратить время на долгий поиск документации. На сайте есть подробные шпаргалки по C++ и C#: быстрые справочники по синтаксису, контейнерам, алгоритмам STL, .NET и другим вещам, которые постоянно используются в разработке.

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

📣 C++ Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍9🔥8
Почему std::move не делает move?

Многие воспринимают std::move как команду на перенос. Но на самом деле он ничего не перемещает сам по себе. Он только приводит объект к rvalue, а дальше уже перегрузки решают, что будет вызвано: move или copy.

В этом примере проблема в const. После std::move(p) тип выражения — const Packet&&. Но move-конструктор обычно принимает Packet&&, то есть неконстантный rvalue. Такой конструктор сюда не подходит, поэтому вызывается копирование.

Из-за этого легко получить неожиданный copy там, где по коду вроде бы явно написан move. Особенно неприятно, когда это происходит внутри контейнеров или в горячем участке кода.

Если объект действительно нужно переместить, он не должен быть const.
Packet p{"payload"};
q.push_back(std::move(p)); // move


Именно поэтому std::move — это не перенос, а всего лишь приведение. Он дает возможность вызвать move, но не гарантирует его.

🔥 std::move сам ничего не двигает. Если объект const, вместо move ты почти наверняка получишь copy.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥135👍4
This media is not supported in your browser
VIEW IN TELEGRAM
📂 Напоминалка по парадигмам программирования!

Например, Imperative Programming описывает программу как последовательность шагов, которые изменяют состояние, а Object-Oriented Programming строит код вокруг объектов и классов.

На картинке — 4 важные парадигмы программирования, которые используются в современных языках.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍7🔥7
👩‍💻 Сжимаем и восстанавливаем строки с помощью RLE (Run-Length Encoding)

Сегодня реализуем алгоритм сжатия строк с помощью RLE (Run-Length Encoding), а также восстановление строки из сжатого представления.

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

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

При распаковке парсим число и столько раз добавляем следующий символ.

Проверяем корректность: сжимаем → распаковываем → сравниваем строки.


Такой приём особенно полезен для логов, графики и повторяющихся данных, где он экономит место.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍43
Быстро тестируем код через assert.

Сейчас научимся добавлять простые проверки прямо в код, чтобы убедиться, что функции работают правильно. Это особенно удобно на этапе отладки и для мини-тестов без фреймворков.

Подключим нужную библиотеку:
#include <cassert>
#include <iostream>


Предположим, у нас есть функция, которая должна возвращать квадрат числа. Реализуем её так:
int square(int x) {
return x * x;
}


Теперь напишем несколько простых тестов с помощью assert, чтобы проверить, что функция работает правильно на базовых примерах:
int main() {
assert(square(2) == 4);
assert(square(-3) == 9);
assert(square(0) == 0);
std::cout << "Все тесты пройдены!\n";
return 0;
}


Если проверка не пройдёт — программа остановится и покажет, где ошибка.

Вот как может выглядеть ошибка, если ожидание не совпадает с результатом:
Assertion failed: square(2) == 5, file main.cpp, line 10


🔥 Таким образом ты можешь быстро проверять поведение функций — без сторонних библиотек и с минимальным кодом.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍43
☕️ Сильная статья — понятный вход в ray tracing через базовую геометрию, лучи и построение изображения.

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

• Как формируется изображение через плоскость проекции, камеру и направление лучей
• Почему пиксели можно представить как результат пересечения лучей со сценой
• Базовая логика, с которой начинается построение собственного трассировщика лучей

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


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍6🔥4
Собрал чат-бота за вечер → заработал 9 000₽.

Так и работают специалисты по чат-ботам:
открыл шаблон → собрал бота как конструктор → получил деньги.

Работы — на 2–3 часа.
Оплата — 9–15 000₽ за сборку.
Никакого программирования и долгих задач.

Если умеешь открыть ворд или запустить косынку — справишься.

А спрос сейчас бешеный:
более 10 000 предпринимателей в месяц ищут тех, кто делает ботов и авторассылки.
Это одна из самых простых и пустых ниш в онлайне — бери и зарабатывай.

И главное:
Собрать первого бота без опыта и получить клиента — проще, чем кажется.
Все инструкции лежат здесь:
👉 @other_digital_bot

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

Пробуй: @other_digital_bot
👎11👍1
Почему std::async иногда не делает код асинхронным?

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

Если этот future не сохранить, он будет уничтожен в конце выражения. А для задачи, запущенной с std::launch::async, это может означать ожидание завершения прямо в деструкторе.

В итоге код выглядит как fire-and-forget, но на деле поток может заблокироваться уже на этой строке. То есть вместо фоновой работы ты случайно получаешь скрытую синхронизацию.

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

Если результат нужен позже, future надо сохранить и явно решить, когда именно его ждать.
auto fut = std::async(std::launch::async, [] {
reindex();
});

std::cout << "after async\n";


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

🔥 Не потеряй future от std::async. Иначе “запустил в фоне” легко превращается в “случайно дождался здесь же”.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥65
📂 Напоминалка для работы с Big O Notation!

Например, O(1) — выполняется за постоянное время, а O(n) растёт линейно от размера входных данных.

На картинке — основные виды сложности, которые чаще всего встречаются в алгоритмах и структурах данных.

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

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