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

Автор: @energy_it

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

Реклама на бирже: 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
🔥86👍3🤝3
Коррутины: мини-генератор Фибоначчи за 5 строк!

С корутинами можно легко делать ленивые генераторы — без внешних буферов, флагов или сложных классов-итераторов.

Вот сама функция-генератор — всего 5 строк логики:
std::experimental::generator<int> fib() {
int a = 0, b = 1;
while (true) {
co_yield a;
auto t = a; a = b; b = t + b;
}
}


Здесь co_yield приостанавливает выполнение и возвращает текущее значение, а при следующем вызове возобновляет работу ровно там, где остановилась. Все управление состоянием и стеком берёт на себя механизм корутин.

Использование в main() предельно простое — берём значения до нужного предела:
int main() {
for (auto v : fib()) {
if (v > 1000) break;
std::cout << v << ' ';
}
}


Цикл автоматически остановится, когда число превысит 1000, и выведет «0 1 1 2 3 5 8 …» вплоть до последнего подходящего значения.

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

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥96👍5
👩‍💻 Суффиксный массив + LCP — быстрый индекс для строк!

Эти структуры превращают строки в быстрый инструмент поиска и анализа.

Что важно знать:

• Строятся быстро, занимая умеренную память и время;

Помогают мгновенно находить повторения и разные подстроки;

Упрощают задачи сравнения текстов и циклических сдвигов;


Освойте их и ускорьте текстовые задачи сегодня.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 Нашел вам simdjson — это ультрабыстрая библиотека для работы с JSON

Она позволяет парсить JSON-файлы в десятки раз быстрее стандартных решений, используя SIMD-инструкции современных процессоров. Поддерживает DOM-модель, потоковую обработку и API для удобной интеграции.

Оставляю ссылочку: GitHub 📱


📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥123👍3
👩‍💻 Разбираем 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