C/C++ Ready | Программирование (@cpp_ready) — Telegram-канал | Telegram Dialogs
Telegram Dialogs — логотип
Все каналы
C/C++ Ready | Программирование

C/C++ Ready | Программирование

@cpp_ready

15.6K подписчиков технологии 💬 Комментарии открыты

Авторский канал по разработке на C и C++. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3QREHc

Последние публикации

C/C++ Ready | Программирование
18.09.2026 17:12 · 👁 2.6K
Почему setprecision не всегда означает количество знаков после точки? В C++ для форматирования дробных чисел часто используют std::setprecision. На первый взгляд кажется, что он задаёт количество цифр после запятой. Но без std::fixed это не так: std::cout << std::setprecision(3) << 123.456; Результат будет не 123.456 с тремя знаками после точки. Поток выведет три значащие цифры: 123 Если нужны знаки после точки, добавляют std::fixed: std::cout << std::fixed << std::setprecision(3) << 123.456; Теперь результат будет предсказуемым: 123.456 Для маленьких чисел разница ещё заметнее: std::cout << std::setprecision(2) << 0.012345; Без fixed поток снова считает значащие цифры и может перейти к компактной форме вывода. std::setprecision сам по себе управляет точностью, а не обязательно количеством символов после точки. 📣 C++ Ready | #совет
C/C++ Ready | Программирование
18.09.2026 07:30 · 👁 2K
Собираем простой пул объектов на C++! Иногда объект дорого создавать заново каждый раз. Например, буфер, парсер, контекст или структура с заранее выделенной памятью. В этой задаче: • храним свободные объекты • выдаём готовый экземпляр • возвращаем объект обратно • очищаем состояние перед повторным использованием Такой подход помогает снизить количество аллокаций и делает повторное использование ресурсов более явным. 📣 C++ Ready | #задача
C/C++ Ready | Программирование
17.09.2026 08:12 · 👁 2.7K
Пишем вывод последних строк файла на C++! Иногда нужно быстро посмотреть конец лога или временного файла. Сделаем маленькую функцию, которая хранит только последние N строк и не загружает весь файл в память. Для этого удобно использовать std::deque. Он позволяет добавлять строки в конец и удалять самые старые строки из начала. Сначала подключим нужные заголовки: #include <deque> #include <fstream> #include <iostream> #include <string> Теперь открываем файл и готовим контейнер: std::ifstream in(path); std::deque<std::string> tail; std::string line; При чтении добавляем новую строку в конец: while (std::getline(in, line)) { tail.push_back(line); } Если строк стало больше лимита, удаляем самую старую: if (tail.size() > limit) { tail.pop_front(); } В итоге печатаем то, что осталось в deque: for (const auto& row : tail) { std::cout << row << '\n'; } Такой подход работает потоково. Даже если лог большой, в памяти одновременно лежит только нужное количество последних строк. 📣 C++ Ready | #практика
C/C++ Ready | Программирование
15.09.2026 08:12 · 👁 3.2K
Шпаргалка по std::span в C++20! Например, std::span позволяет передать часть vector, array или обычного C-массива без копирования и без владения памятью. На картинке собраны основные сценарии std::span. Есть создание view на диапазон, size, size_bytes, front, back, data, first, last, subspan и важное предупреждение про lifetime исходного контейнера. Сохрани, чтобы не потерять! 📣 C++ Ready | #ресурс
C/C++ Ready | Программирование
14.09.2026 08:12 · 👁 2.6K
Интересная статья про constexpr Game of Life на C++! Автор разбирает необычный эксперимент, где логика игры считается ещё на этапе компиляции. Внутри есть consteval, constexpr, двумерный Canvas, генерация поколений и попытка достать результат без обычного запуска программы. В статье автор показывает: • как Game of Life можно представить как набор compile-time вычислений • зачем нужен consteval и чем он строже обычного constexpr • как искать результат работы программы в артефактах сборки Продолжай читать на Habr 📣 C++ Ready | #статья
C/C++ Ready | Программирование
12.09.2026 12:10 · 👁 2.8K
Почему reserve() не добавляет элементы в vector? reserve() часто используют перед заполнением vector: std::vector<int> nums; nums.reserve(10); После этого у vector действительно появляется место под 10 элементов, но размер остаётся нулевым: std::cout << nums.size() << '\n'; // 0 std::cout << nums.capacity() << '\n'; // 10 Важно не путать size и capacity. Такой код ошибочный: std::vector<int> nums; nums.reserve(10); nums[0] = 42; // undefined behavior Индексатор работает только с уже существующими элементами. reserve() выделяет память, но не создаёт объекты внутри vector. Если нужно добавить значения, используй push_back(): nums.push_back(42); nums.push_back(100); А если нужны именно 10 готовых элементов, нужен resize(): std::vector<int> nums; nums.resize(10); nums[0] = 42; reserve() полезен, когда ты заранее знаешь примерное количество будущих элементов: std::vector<std::string> logs; logs.reserve(1000); for (auto line : input) { logs.push_back(line); } Так vector реже перевыделяет память при росте. 📣 C++ Ready | #совет
C/C++ Ready | Программирование
12.09.2026 07:12 · 👁 2.4K
👍 The Art of Developing in Modern C++ — практические задания по современному C++! В репозитории собраны решения и упражнения из специализации «Основы разработки на современном C++» от МФТИ и Яндекса. Материал разбит по уровням сложности — от «Белого пояса» с базовыми конструкциями языка до более продвинутых заданий из «Жёлтого», «Красного» и «Коричневого поясов». Оставляю ссылочку: GitHub 📱 📣 C++ Ready | #репозиторий
C/C++ Ready | Программирование
11.09.2026 06:12 · 👁 2.1K
Собираем простой парсер CLI-аргументов на C++! Нужно разобрать аргументы командной строки. Сделаем маленький парсер для флагов и параметров вида --key=value. В этой задаче: • идём по argv • отделяем флаги от значений • сохраняем параметры в map • проверяем наличие нужных опций Такой парсер удобен для утилит, тестовых запусков и маленьких dev-инструментов. 📣 C++ Ready | #задача
C/C++ Ready | Программирование
09.09.2026 15:12 · 👁 2.9K
Парсим простой CSV без сторонних библиотек на C++! Иногда нужно разобрать строку CSV из лога, экспорта или конфигурации. Если формат простой, можно обойтись стандартной библиотекой и аккуратно пройти строку посимвольно. Возьмём строку: std::string line = "id,\"hello, cpp\",active"; Главная сложность это запятая внутри кавычек. Её нельзя считать разделителем. Заведём буфер и флаг: std::string cell; bool quoted = false; Теперь проходим символы: for (char ch : line) { if (ch == '"') { quoted = !quoted; continue; } if (ch == ',' && !quoted) { cells.push_back(cell); cell.clear(); continue; } cell += ch; } После цикла не забываем добавить последнюю ячейку: cells.push_back(cell); Проверим результат: for (const auto& value : cells) { std::cout << '[' << value << "]\n"; } Ожидаемый вывод: [id] [hello, cpp] [active] При парсинге текста важно учитывать контекст. Одна и та же запятая может быть разделителем или обычным символом внутри значения. 📣 C++ Ready | #практика
C/C++ Ready | Программирование
09.09.2026 07:12 · 👁 1.8K
Разбираем std::filesystem 7 функций для работы с файлами! std::filesystem помогает работать с путями, директориями и файлами без ручной склейки строк и платформенных ifdef. В этой шпоре: exists, is_regular_file, create_directories, directory_iterator, recursive_directory_iterator, copy_file и remove_all. 📣 C++ Ready | #шпора
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.