В курсе подробно разбираются инструменты параллельного программирования: создание потоков через 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
🔥16👍7❤5
Лёгкая утилита-«швейцарский нож» для TCP/UDP и UNIX-сокетов: слушает/устанавливает соединения, пересылает файлы, делает обратные оболочки, стримит и сканирует порты/граббинг баннеров.
Часто комбинируют с openssl, tar, dd для шифрования, архивации и клонирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥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
🔥12❤8👍4🤝3