C/C++ Ready | Программирование
11.7K subscribers
695 photos
41 videos
333 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Реклама на бирже: https://telega.in/c/cpp_ready
加入频道
👩‍💻 Многопоточность и асинхронное программирование!

В курсе подробно разбираются инструменты параллельного программирования: создание потоков через std::thread, работа с мьютексами и блокировками, использование std::async, future и promise для асинхронных операций

Ссылочка на плейлист: YouTube 🖤


📣 C++ Ready | #курс
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍5🔥3
Пользовательские аллокаторы в STL: управляем памятью сами!

Иногда нужно больше контроля над тем, как выделяется память — например, логировать аллокации или использовать собственный буфер.

Для этого в 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);


🔥 Это позволяет наглядно контролировать выделение памяти, а также легко внедрять собственные стратегии аллокации.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🔥5
Что же выведет консоль?
Anonymous Quiz
76%
A
9%
B
12%
C
3%
D
👍146🔥4
👩‍💻 Разберем std::span — лёгкое представление, не владеющее данными!

Позволяет представлять и передавать срезы элементов (обёртка над массивом/вектором/указателем+размером) без лишних копий.

Что важно знать:

Не владеет данными — он хранит лишь указатель и длину; контейнер должен жить дольше span, иначе — UB.

Синтаксис: std::span<T> (динамическая длина) и std::span<T, N> (фиксированная длина).

Конструкторы принимают std::array, std::vector, C-массив или pointer+size


Удобно для передачи срезов без копирования, главное — не допускать dangling и отдавать span<const T> для чтения.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍75
📂 Напоминалка по netcat (nc) — универсальному сетевому «швейцарскому ножу»

Лёгкая утилита-«швейцарский нож» для TCP/UDP и UNIX-сокетов: слушает/устанавливает соединения, пересылает файлы, делает обратные оболочки, стримит и сканирует порты/граббинг баннеров.

Часто комбинируют с openssl, tar, dd для шифрования, архивации и клонирования.

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥74
👩‍💻 Сегодня разберем дерево отрезков — мощную структуру данных!

Она применяется для быстрых операций над массивами: получение информации на отрезке и обновление значений. Всё это работает за логарифм времени!

Ключевые моменты:

Построение: берём массив и строим по нему дерево, каждая вершина отвечает за минимум на своём участке.

Запрос: спускаясь по дереву, можно найти минимум на любом отрезке за O(log n).

Обновление: меняем значение в массиве, и дерево быстро перестраивается только по пути от листа к корню


Дерево отрезков моментально реагирует на изменения, не пересчитывая весь массив.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥128👍4🤝3