Консольная утилита, которая с помощью
Boost.Progress
визуально отображает обратный отсчёт заданного числа секунд.Важно помнить:
• Прогресс-бар наглядно отражает состояние выполнения заданного таймера.
• Гибкое перенаправление вывода позволяет интегрировать бар куда угодно.
• Принцип работы легко адаптируется к любым другим задачам консоли.
Это позволяет просто и наглядно адаптировать визуализацию прогресса под другие консольные задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤8👍5🤝1
В этой статье:
• Пошаговая настройка среды и сохранение картинки в формате PPM
• Отрисовка карты уровня в виде сетки из прямоугольников
• Добавление игрока на карту с простыми координатами
🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍5🔥4
Позволяет работать с фрагментами текста очень быстро: брать и обрабатывать куски строки, пропускать уже обработанные символы, искать разделители и безопасно передавать указатель с длиной в C-функции — всё это без лишних выделений памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥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
👍14❤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