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

Автор: @energy_it

Заявление в РКН: № 6382873737

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Разбираем std::generator — ленивый range, построенный на механизме корутин!

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

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍63
👍35😁158🔥2
Парсим --key=value аргументы!

Создадим мини-парсер командной строки, который превращает аргументы вроде --port=8080 и --debug в удобный unordered_map:
std::unordered_map<std::string, std::string>
parse_args(int argc, char* argv[]) {
std::unordered_map<std::string, std::string> opts;


Объявляем функцию parse_args, которая вернёт словарь флагов и их значений:
for (int i = 1; i < argc; ++i) {
std::string arg{argv[i]};
if (arg.rfind("--", 0)) continue;


Перебираем argv, пропуская имя программы (argv[0]) и фильтруем только аргументы, начинающиеся с --:
        auto eq = arg.find('=');
std::string key = arg.substr(2, eq - 2);
std::string val = (eq == std::string::npos)
? "true"
: arg.substr(eq + 1);
opts[key] = val;
}
return opts;
}


Разделяем строку на ключ и значение: если = не найден — сохраняем "true" как значение. Все пары кладём в unordered_map:
int main(int argc, char* argv[]) {
auto args = parse_args(argc, argv);
std::cout << "port = " << args["port"] << "\n";
std::cout << "debug = " << args["debug"] << "\n";
}


В main выводим значения ключей port и debug, если они были переданы.

🔥 Удобный CLI-парсер за 18 строк на чистом C++17, без сторонних библиотек!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥3
❤️ Очень интересная статья с Хабра, в которой вы узнаете, как создать простую нейросеть на C++.

В этой статье:
• Логика работы нейросети;
• Обучение нейросети;

• Подсчёт значений нейронов.

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


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍6🔥4
👩‍💻 Надёжный пул потоков на основе std::jthread!

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

В этой задаче:
Подходит для быстрого выполнения множества небольших заданий;

Обеспечивает порядок обработки задач без сложных манипуляций;

Самостоятельно завершает все потоки при выходе из программы.


Идеально для простых параллельных операций.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥6👍4
This media is not supported in your browser
VIEW IN TELEGRAM
😎 opengenus — чек-лист для подготовки к собеседованиям!

Подборка из задач по алгоритмам и структурам данных: массивы, списки, стеки, очереди, деревья, хеш-таблицы и сортировки. Каждая задача — с пояснениями и ссылками на базовые и продвинутые приёмы.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93👍3
👩‍💻 Как освежить объект в старой памяти?

Функция std::launder сообщает компилятору, что по адресу создан новый объект.

Что важно знать:
• Без него программа может получить старое число;

Его вызов гарантирует чтение именно новой записи;

Нужен только при хитром. обращении с памятью


Используй разумно, избегай неожиданных ошибок.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥165👍3
std::ranges + views в действии: фильтруем и преобразуем без циклов!

Нужно из вектора чисел отфильтровать чётные и возвести их в квадрат?

В C++20 это можно сделать декларативно — без for, временных переменных и ручного перебора:
std::vector<int> data{1,2,3,4,5,6,7,8,9,10};


Создаём исходный вектор с числами от 1 до 10:
auto pipeline = data
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });


Формируем pipeline из двух представлений: фильтрация чётных чисел и возведение их в квадрат:
std::ranges::copy(
pipeline,
std::ostream_iterator<int>(std::cout, " ")
);


Выводим полученные значения в консоль через std::ranges::copy и итератор вывода.

🔥 Современный C++ позволяет выразить обработку контейнеров кратко, наглядно и без лишней рутины!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥3
👩‍💻 Разбираем std::mdspan — универсальный способ представить массив как многомерную структуру!

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

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥226👍4