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::tie и std::ignore в действии!

Иногда функция возвращает несколько значений — например, пара из std::pair. Раньше приходилось вручную обращаться к .first и .second, что быстро превращалось в нечитаемый код.

С std::tie можно сразу распаковать результат в переменные:
std::pair<int, std::string> get_data() {
return {42, "ответ"};
}

int main() {
int num; std::string text;
std::tie(num, text) = get_data();
std::cout << num << " — " << text;
}


Если нужно проигнорировать часть результата — используем std::ignore:
auto [code, message] = std::make_pair(200, "OK");
std::cout << code; // 200

int val;
std::tie(val, std::ignore) = std::make_pair(7, 99);
std::cout << val; // 7


🔥 Удобно, когда нужно быстро разобрать структуру на отдельные значения, не засоряя код .first / .second.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥74
👩‍💻 Создаем утилиту для конвертации изображений в ASCII-арт!

Сможет превращать любую картинку в символьную «картину» прямо в терминале или сохраняет в .txt

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

Считываем и масштабируем изображение в оттенки серого с помощью OpenCV;

Преобразуем яркость каждого пикселя в соответствующий символ из палитры;

Выводим построчно готовый ASCII-арт без дополнительных зависимостей.


Это минималистичный инструмент для создания текстового искусства.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥478👍8🤝3
👩‍💻 Разберем execution — один аргумент, который превращает обычные алгоритмы STL в параллельные!

Просто допишите std::execution::par или par_unseq, и компилятор сам разобьёт работу на ядра и SIMD-инструкции, давая прирост скорости без лишнего кода и головной боли.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥286🤝5👍2
Мини-конфиг на JSON — читаем, меняем, сохраняем!

Хотите настроить приложение через внешний файл, не заводя сложный парсер? Используйте JSON: читаемо, удобно, поддерживается из коробки с nlohmann/json.

Подключаем библиотеку и читаем конфиг config.json в один объект:
#include <nlohmann/json.hpp>
#include <fstream>
using json = nlohmann::json;

json cfg;
std::ifstream("config.json") >> cfg;


Теперь можно безопасно получить значения и обновить, если нужно:
int port = cfg.value("port", 8080);
cfg["debug"] = true;


Сохраняем обратно с отступами — удобно для ручной правки:
std::ofstream("config.json") << cfg.dump(2);


🔥 JSON стал стандартом де-факто для конфигураций: вы получаете чистоту, читаемость и работу без бойлерплейта.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥7👍3
😁9919🔥7👎3👍2
👩‍💻 Синхронизируем потоки без боли!

Появилось два новых примитива — std::latch и std::barrier, которые убирают лишние condition_variable и делают многопоточность читаемой.

Что важно знать:
• latch — одноразовая точка сбора, ждёт завершения всех задач;

• barrier — циклическая синхронизация с коллбэком после каждой фазы;

Просты в использовании, особенно при множестве параллельных этапов.


Так что, они убирают бойлерплейт и делают потоковый код чище и надёжнее.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥134🤝1
Собираем все .txt из папки в один файл — без лишних циклов и копирования!

Часто нужно объединить десятки текстовых файлов в один отчёт или сводку. Всё делаем стандартными средствами C++ — коротко и надёжно.

Получаем список всех .txt файлов в нужной директории:
namespace fs = std::filesystem;
std::vector<fs::path> txt_files(const fs::path& dir) {
std::vector<fs::path> out;
for (auto& e : fs::directory_iterator(dir))
if (e.is_regular_file() && e.path().extension() == ".txt")
out.push_back(e.path());
return out;}


Открываем итоговый файл и последовательно добавляем в него содержимое каждого файла:
void concat_txts(const std::vector<fs::path>& files, const fs::path& out) {
std::ofstream ofs(out, std::ios::binary);
for (const auto& path : files) {
std::ifstream ifs(path, std::ios::binary);
ofs << ifs.rdbuf() << '\n';
}}


Всё вместе — склеиваем файлы в main:
int main() {
auto files = txt_files("notes");
concat_txts(files, "all.txt");
std::cout << "Готово: " << files.size() << " файлов объединено\n";}


🔥 Можно использовать для логов, заметок, экспорта данных. Всё на стандартной библиотеке — переносимо и просто!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍145🔥4