Читаем весь файл в строку!
Иногда нужно быстро загрузить весь текстовый файл в память — например, чтобы распарсить конфиг, JSON или HTML. Это можно сделать в одну строчку, без циклов и ручного копирования.
Сначала подключим необходимые библиотеки из стандартной поставки:
Теперь считаем весь файл
Результат: вся строка будет содержать полный текст файла, включая пробелы и переводы строк.
🔥 Такой способ прост, лаконичен и не требует ручного перебора или буферов — идеально для загрузки небольших текстовых файлов.
📣 C++ Ready | #практика
Иногда нужно быстро загрузить весь текстовый файл в память — например, чтобы распарсить конфиг, JSON или HTML. Это можно сделать в одну строчку, без циклов и ручного копирования.
Сначала подключим необходимые библиотеки из стандартной поставки:
#include <fstream>
#include <string>
// std::istreambuf_iterator
#include <iterator>
Теперь считаем весь файл
input.txt в строку data:std::string data(
(std::istreambuf_iterator<char>(std::ifstream("input.txt").rdbuf())),
std::istreambuf_iterator<char>());
Результат: вся строка будет содержать полный текст файла, включая пробелы и переводы строк.
🔥 Такой способ прост, лаконичен и не требует ручного перебора или буферов — идеально для загрузки небольших текстовых файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍9🔥5
Консольная утилита, которая по координатам запрашивает у Open-Meteo текущую температуру и погодный код, а в вывод добавляет соответствующее эмодзи.
Основные моменты:
• HTTP-запрос выполняется через cpr (обёртка над libcurl) с проверкой сетевых ошибок и кода 200 OK;
• nlohmann::json парсит текстовый JSON в объект, из которого легко получить поля temperature (°C) и weathercode;
• Эмодзи для кодов хранятся в std::unordered_map, а find даёт «?» для неизвестных значений.
Это позволяет быстро адаптировать CLI-клиент для курсов валют, новостей и других сервисов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37❤6👍6🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собраны краткие и наглядные примеры кода с понятными комментариями; статьи рассортированы по тегам уровня (beginner → advanced) и темам вроде алгоритмов, контейнеров, работы с файлами, строк, памяти и т. д.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤6🔥6🤝1
Они позволяют безопасно выполнить тяжёлый участок только один раз при множестве одновременных обращений.
Что важно знать:
• Первый запуск делает работу, остальные спокойно ждут.
• Повторные вызовы получают готовый результат без лишних проверок.
• Если произошёл сбой, механизм позволяет повторить запуск позже.
Такой подход уменьшает код синхронизации и устраняет гонки данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍8🤝6❤1
Позволяет удобно работать с массивами и другими последовательностями: проверять, пустой ли диапазон, получать количество элементов, быстро выделять начало, конец или середину без лишней возни с указателями и копированием.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍5❤4🤝3
Безопасные альтернативы nullptr и union: optional и variant в действии!
Иногда функция не может вернуть результат — элемент не найден, ошибка загрузки, невалидный ввод. Раньше приходилось использовать
В современном C++ всё проще — используем
Проверяем, найдено ли значение, прежде чем его использовать:
Если нужно вернуть один из нескольких типов — поможет
Проверяем, какой тип находится внутри
🔥 Эти типы делают код безопаснее, понятнее и избавляют от старых хаков с
📣 C++ Ready | #практика
Иногда функция не может вернуть результат — элемент не найден, ошибка загрузки, невалидный ввод. Раньше приходилось использовать
nullptr, -1, false или магические коды. В современном C++ всё проще — используем
std::optional и std::variant.std::optional чётко указывает: значение может быть, а может и не быть.std::optional<int> find(int x) {
if (x == 42) return x;
return std::nullopt;
}Проверяем, найдено ли значение, прежде чем его использовать:
if (auto val = find(42))
std::cout << *val;
Если нужно вернуть один из нескольких типов — поможет
std::variant.std::variant<int, std::string> compute(bool ok) {
return ok ? 123 : "Ошибка";
}Проверяем, какой тип находится внутри
variant, и обрабатываем его:if (std::holds_alternative<int>(r))
std::cout << std::get<int>(r);
🔥 Эти типы делают код безопаснее, понятнее и избавляют от старых хаков с
union.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤6🔥5👎3
Показываем, как сжать и восстановить строку в памяти с использованием библиотеки zlib — простой и эффективный способ уменьшить объём данных для хранения или передачи.
Что важно:
• compressBound помогает заранее выделить буфер нужного размера.
• std::vector<uint8_t> — удобный контейнер для хранения сжатых байтов.
• Храним оригинальную длину строки, чтобы точно разжать обратно.
В примере: строка 43 байта → сжатие до 34 байт → восстановление обратно в 43 байта. Проверяем идентичность — всё работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8❤6🤝2