This media is not supported in your browser
VIEW IN TELEGRAM
FlowchartAI — это бесплатный AI-генератор блок-схем, который из текста или кода автоматически строит диаграмму. Он анализирует твой ввод (описание процесса/алгоритма или код) и превращает его в визуальную блок-схему, которую можно смотреть прямо в браузере без регистрации.
📌 Оставляю ссылочку: flowchartai.org
📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥7👎1
Когда std::string_view помогает, а когда создает висячие ссылки!
Ниже пример безопасного использования в параметре функции чтения.
Проблемы начинаются, когда view живет дольше строки, на которую он смотрит. Тогда ошибка может проявляться нестабильно, и ее тяжело поймать без хороших проверок.
Есть и более тихий вариант той же проблемы, когда появляется временный объект после
В таких местах код выглядит невинно, поэтому ошибка часто проходит ревью. Если время жизни источника неочевидно, безопаснее хранить и возвращать
📣 C++ Ready | #практика
std::string_view полезен там, где нужна легкая ссылка на строку без копирования. Это делает интерфейсы аккуратнее и часто снижает лишние аллокации.Ниже пример безопасного использования в параметре функции чтения.
void log_message(std::string_view text) {
}Проблемы начинаются, когда view живет дольше строки, на которую он смотрит. Тогда ошибка может проявляться нестабильно, и ее тяжело поймать без хороших проверок.
std::string_view bad() {
return std::string("tmp");
}Есть и более тихий вариант той же проблемы, когда появляется временный объект после
substr.std::string s = "hello";
std::string_view v = s.substr(0, 3);
В таких местах код выглядит невинно, поэтому ошибка часто проходит ревью. Если время жизни источника неочевидно, безопаснее хранить и возвращать
std::string.std::string_view остается отличным инструментом, но только когда вы явно контролируете время жизни данных.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤5👍4
В этой статье:
• Что такое fibers и чем они отличаются от потоков • Сохранение и восстановление контекста на ассемблере • Интеграция волокон в C++-код с рабочими примерами🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍4
Structured bindings — не только для std::pair / std::tuple!
Многие знают structured bindings как способ “распаковать”
Было:
Стало:
Плюсы:
• меньше шума в коде, особенно когда полей 2–3
• удобно в циклах и при распаковке результата функций
• имена задаёшь сразу на месте — читается быстрее
Нюанс: это копия значений. Если нужен доступ к оригинальным полям (чтобы менять их), бери ссылки:
🔥 Итог: если работаешь с простыми
📣 C++ Ready | #совет
Многие знают structured bindings как способ “распаковать”
std::pair или std::tuple, но с C++17 это работает и для обычных struct — если поля публичные.Было:
Point p{10, 20};
int x = p.x;
int y = p.y;Стало:
auto [x, y] = p;
Плюсы:
• меньше шума в коде, особенно когда полей 2–3
• удобно в циклах и при распаковке результата функций
• имена задаёшь сразу на месте — читается быстрее
Нюанс: это копия значений. Если нужен доступ к оригинальным полям (чтобы менять их), бери ссылки:
auto& [x, y] = p;
x = 42; // изменит p.x
struct (Point, Size, Range) — распаковывай их через structured bindings. Код становится короче и понятнее без .x/.y на каждой строке.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤5🤝4
На картинке — компактная визуальная памятка по стандартным алгоритмам C++, показывающая, какие операции можно выполнять с диапазонами: поиск и проверки без изменения данных, переупорядочивание элементов, изменение значений, работу с отсортированными последовательностями и числовые алгоритмы.
Сохрани, чтобы быстрее ориентироваться в STL и реже лезть в документацию при написании C++-кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5🔥5
Небольшая консольная утилита проходит по директории и суммирует размеры всех обычных файлов, чтобы получить общий “вес” папки в байтах.
В этой задаче узнаешь:
• Как обойти директорию рекурсивно через recursive_directory_iterator;
• Как отличать файлы от папок и “прочих” объектов (is_regular_file) и брать размер (file_size);
• Почему обход может бросать исключения и как аккуратно обработать ошибки доступа.
Мини-утилита получается кроссплатформенной и легко расширяется.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤5👍5
Генерируем UUID v4 на чистом C++!
Создадим случайный идентификатор формата
Инициализируем буфер из 16 байтов для будущего UUID.
Генерируем 16 случайных байтов с помощью
Корректируем 7-й и 9-й байты под спецификацию UUID v4 (версия и вариант).
Форматируем байты в шестнадцатеричный вид, вставляя дефисы в нужных позициях.
🔥 Всё на чистом стандартном C++, без единой дополнительной библиотеки!
📣 C++ Ready | #практика
Создадим случайный идентификатор формата
xxxxxxxx-xxxx-4xxx-8xxx-xxxxxxxxxxxx, пригодный для токенов, сессий и тестовых данных.std::string uuid_v4() {
uint8_t bytes[16];Инициализируем буфер из 16 байтов для будущего UUID.
std::random_device rd;
std::uniform_int_distribution<int> dist(0, 255);
for (auto &b : bytes)
b = static_cast<uint8_t>(dist(rd));
Генерируем 16 случайных байтов с помощью
std::random_device и равномерного распределения.bytes[6] = (bytes[6] & 0x0F) | 0x40; // версия 4
bytes[8] = (bytes[8] & 0x3F) | 0x80; // вариант RFC 4122
Корректируем 7-й и 9-й байты под спецификацию UUID v4 (версия и вариант).
std::ostringstream oss;
for (int i = 0; i < 16; ++i) {
oss << std::hex << std::setw(2) << std::setfill('0') << int(bytes[i]);
if (i == 3 || i == 5 || i == 7 || i == 9)
oss << '-';
}
return oss.str();
}
Форматируем байты в шестнадцатеричный вид, вставляя дефисы в нужных позициях.
🔥 Всё на чистом стандартном C++, без единой дополнительной библиотеки!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥8👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь системно изучить основы программирования, этот репозиторий идеальное начало. В переводе на русский собрана структурированная программа: алгоритмы и структура данных, операционные системы, БД, сети, безопасность и многое другое. На самом деле это универсальный учебный план, основанный на лучших открытых курсах и книгах. Отлично подходит для самообучения и подготовки к собеседованиям.
Составляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🔥7
8 марта уже на горизонте. Цветы — это база. А что добавим к релизу?
Если хочется сделать красивый апгрейд праздника, присмотритесь к дизайнерским игрушкам от Super Toys!
Это не только милый сувенир, но и стильные арт-объекты от современных художников и культовых брендов, которые украсят её рабочий стол или полку и будут напоминать о вашем вкусе и внимании гораздо дольше, чем праздничные сторис.
Мы собрали специальную праздничную подборку — чтобы вы закрыли задачу по подарку быстро и красиво!
Прокачайте 8 марта до версии Pro!
Реклама. ООО "НОВЫЕ МЕДИА". ИНН 7813407148. erid: 2W5zFHxq257
Если хочется сделать красивый апгрейд праздника, присмотритесь к дизайнерским игрушкам от Super Toys!
Это не только милый сувенир, но и стильные арт-объекты от современных художников и культовых брендов, которые украсят её рабочий стол или полку и будут напоминать о вашем вкусе и внимании гораздо дольше, чем праздничные сторис.
Мы собрали специальную праздничную подборку — чтобы вы закрыли задачу по подарку быстро и красиво!
Прокачайте 8 марта до версии Pro!
Реклама. ООО "НОВЫЕ МЕДИА". ИНН 7813407148. erid: 2W5zFHxq257
👍3👎2
Мини-пул потоков на std::jthread
Создадим простой пул, который принимает лямбды, параллельно их выполняет и авто-join-ит потоки при выходе из области.
Храним очередь задач, мьютекс, условную переменную и вектор рабочих потоков. Флаг
Конструктор порождает
Деструктор ставит флаг
🔥 Чистый стандарт C++20 — ни Boost, ни сторонних либ!
📣 C++ Ready | #практика
Создадим простой пул, который принимает лямбды, параллельно их выполняет и авто-join-ит потоки при выходе из области.
class ThreadPool {
std::queue<std::function<void()>> jobs; // очередь заданий
std::mutex m;
std::condition_variable cv;
bool stop = false;
std::vector<std::jthread> workers; // jthread = RAII-joinХраним очередь задач, мьютекс, условную переменную и вектор рабочих потоков. Флаг
stop сигнализирует о завершении.public:
ThreadPool(size_t n = std::thread::hardware_concurrency()) {
for (size_t i = 0; i < n; ++i)
workers.emplace_back([this](std::stop_token st) {
while (!st.stop_requested()) {
std::function<void()> job;
{ std::unique_lock lk(m);
cv.wait(lk, [this]{ return stop || !jobs.empty(); });
if (stop && jobs.empty()) return;
job = std::move(jobs.front()); jobs.pop();
}
job(); // выполняем задачу
}
});
}
Конструктор порождает
n потоков. Каждый рабочий ждёт, пока в очереди появится задача, — или пока пулу не придёт сигнал остановиться.template<typename F>
void enqueue(F&& f) {
{ std::lock_guard lk(m); jobs.emplace(std::forward<F>(f)); }
cv.notify_one(); // будим один поток
}
enqueue кладёт новую лямбду в очередь и будит спящего воркера. ~ThreadPool() {
{ std::lock_guard lk(m); stop = true; }
cv.notify_all(); // будим всех для выхода
}
};Деструктор ставит флаг
stop, будит все потоки, а std::jthread автоматически дожидается их завершения.int main() {
ThreadPool pool(4); // 4 рабочих потока
for (int i = 0; i < 8; ++i)
pool.enqueue([i]{ std::printf("job %d\n", i); });
} // ← при выходе pool завершит все задачиPlease open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9❤5
Например, HTTP передаёт данные в открытом виде, без шифрования. HTTPS работает поверх TLS и защищает соединение: выполняется проверка сертификата, обмен ключами и дальнейшая передача данных в зашифрованном виде.
На картинке — ключевые этапы установления соединения.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥9👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍6❤3🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Если тебе сложно понять алгоритмы по учебникам — этот ресурс решает проблему. Автор объясняет графы, геометрию, деревья, меши из геймдева через понятные визуализации и интерактивы. Сложные идеи здесь раскладываются на простые шаги.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝12❤8👍3