Позволяет работать с фрагментами текста очень быстро: брать и обрабатывать куски строки, пропускать уже обработанные символы, искать разделители и безопасно передавать указатель с длиной в C-функции — всё это без лишних выделений памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥7🤝5👍4
В курсе подробно разбираются инструменты параллельного программирования: создание потоков через std::thread, работа с мьютексами и блокировками, использование std::async, future и promise для асинхронных операций
Ссылочка на плейлист: YouTube🖤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5🔥3
Пользовательские аллокаторы в STL: управляем памятью сами!
Иногда нужно больше контроля над тем, как выделяется память — например, логировать аллокации или использовать собственный буфер.
Для этого в C++ можно использовать пользовательские аллокаторы — и подставлять их в стандартные контейнеры, такие как
Сначала создадим минимальный аллокатор с логированием:
Здесь
Теперь можем использовать аллокатор с
🔥 Это позволяет наглядно контролировать выделение памяти, а также легко внедрять собственные стратегии аллокации.
📣 C++ Ready | #практика
Иногда нужно больше контроля над тем, как выделяется память — например, логировать аллокации или использовать собственный буфер.
Для этого в C++ можно использовать пользовательские аллокаторы — и подставлять их в стандартные контейнеры, такие как
std::vector
.Сначала создадим минимальный аллокатор с логированием:
template <typename T>
struct LoggingAllocator {
using value_type = T;
T* allocate(std::size_t n) {
std::cout << "alloc " << n << '\n';
return static_cast<T*>(::operator new(n * sizeof(T)));
}
Здесь
allocate
просто выводит сообщение и выделяет память обычным способом. Теперь добавим освобождение:void deallocate(T* p, std::size_t) noexcept {
std::cout << "free\n";
::operator delete(p);
}};
Теперь можем использовать аллокатор с
std::vector
:std::vector<int, LoggingAllocator<int>> v;
v.push_back(1);
v.push_back(2);
🔥 Это позволяет наглядно контролировать выделение памяти, а также легко внедрять собственные стратегии аллокации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤6🔥5
👍15❤6🔥4
Позволяет представлять и передавать срезы элементов (обёртка над массивом/вектором/указателем+размером) без лишних копий.
Что важно знать:
• Не владеет данными — он хранит лишь указатель и длину; контейнер должен жить дольше span, иначе — UB.
• Синтаксис: std::span<T> (динамическая длина) и std::span<T, N> (фиксированная длина).
• Конструкторы принимают std::array, std::vector, C-массив или pointer+size
Удобно для передачи срезов без копирования, главное — не допускать dangling и отдавать span<const T> для чтения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍7❤5
Лёгкая утилита-«швейцарский нож» для TCP/UDP и UNIX-сокетов: слушает/устанавливает соединения, пересылает файлы, делает обратные оболочки, стримит и сканирует порты/граббинг баннеров.
Часто комбинируют с openssl, tar, dd для шифрования, архивации и клонирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥7❤4
Она применяется для быстрых операций над массивами: получение информации на отрезке и обновление значений. Всё это работает за логарифм времени!
Ключевые моменты:
• Построение: берём массив и строим по нему дерево, каждая вершина отвечает за минимум на своём участке.
• Запрос: спускаясь по дереву, можно найти минимум на любом отрезке за O(log n).
• Обновление: меняем значение в массиве, и дерево быстро перестраивается только по пути от листа к корню
Дерево отрезков моментально реагирует на изменения, не пересчитывая весь массив.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤9👍4🤝3
Читаем весь файл в строку!
Иногда нужно быстро загрузить весь текстовый файл в память — например, чтобы распарсить конфиг, 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
❤21👍8🔥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
🔥30👍5❤4🤝1