cpp_lib | Unsorted

Telegram-канал cpp_lib - Библиотека C/C++ разработчика

2630

Полезные материалы по всему, что может быть полезно плюсовику/сишнику.

Subscribe to a channel

Библиотека C/C++ разработчика

😮‍💨Устали вручную разруливать зависимости в C++ проектах? Время автоматизировать процесс! 🕒💻

Пакетные менеджеры Conan и vcpkg позволяют легко управлять библиотеками, устанавливать зависимости и ускорять сборку. Разберем, как это работает, на открытом уроке.

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

Спикер Денис Злобинстарший инженер-программист в Astra Linux, опытный наставник разработчиков.

➡️Встречаемся 20 марта в 20:00 мск, разберем всё на практике! Участники получат скидку на большое обучение по разработке на С++.

Регистрация: https://vk.cc/cJOUIw

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Библиотека C/C++ разработчика

👩‍💻 C — это фундамент программирования, а не просто язык.

Если вы хотите работать с производительностью, встроенными системами и взаимодействием с ОС — пора его освоить

В OTUS в рамках онлайн-курса «Программист С» пройдут бесплатные вебинары для разработчиков, админов и IoT-специалистов:

📌11 марта (вт) в 20:00 мск — открытый урок «Практический Си: Разрабатываем игру-викторину» научит вас работать с памятью, использовать стандартную библиотеку и создавать полноценные консольные приложения.

➡️ Регистрация: https://vk.cc/cJpRPx

📌24 марта(пн) в 20:00 мск — открытый урок «Язык и алгоритмы: Увлекательное путешествие в лексический анализ на C».
Разработаем простое приложение для лексического анализа простейшего языка программирования на языке С и рассмотрим:
-Основные алгоритмы и технологии создания приложений для лексического анализа.
-Области применения лексического анализа и особенности реализации.
-Поиск и определение ошибок в тексте.

➡️Регистрация: https://vk.cc/cJpRPx

Не упустите возможность протестировать курс и познакомиться с экспертами. Полный курс можно будет оплатить любым удобным для вас способом. Для участия нужно пройти тест на странице с описанием курса.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека C/C++ разработчика

Плывущий экран. Вирус на C++. Melting Screen

Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Алгоритмы манипуляций с битами

В статье приведены алгоритмы обработки коротких битовых строк, обычно вмещающихся в машинное слово, в большей степени эти алгоритмы предназначены для обработки строк длины 32 или 64, но многие из них можно применять для SIMD инструкций или даже GPU.

https://habr.com/ru/articles/886182/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Botan — это мощная криптографическая библиотека на C++, поддерживающая широкий спектр алгоритмов и предназначенная для использования в различных проектах. Она отличается модульной архитектурой, хорошей производительностью и кроссплатформенностью.

Основные возможности:
🔹 Поддержка симметричных и асимметричных алгоритмов шифрования
🔹 Генерация и управление ключами
🔹 Хеш-функции и HMAC
🔹 Поддержка TLS и сертификатов X.509
🔹 Стандартизованные и экспериментальные криптографические примитивы

Библиотека активно развивается и используется в различных областях, включая безопасность сетевых соединений, шифрование данных и аутентификацию.

https://github.com/randombit/botan

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

C++ — мощный инструмент, но с ним нужно правильно работать

Хотите писать на C++, но настройка окружения кажется головной болью?

◽️ Компилятор не видит файлы?
◽️Дебаг работает через раз?
◽️VSCode — просто красивый редактор?

💡 Приходите на открытый вебинар «Готовим рабочее место: C++ + VSCode»!

📅 5 марта в 20:00 (мск)

Мы разберём:
◽️Как настроить VSCode для C++: компиляторы, расширения, дебаг
◽️Как запускать программы без ошибок и ручной магии
◽️Как сделать среду разработки удобной и эффективной

🎯 А ещё всем участникам подарим скидку на топовый курс «C++ Developer»!

🔗 Регистрация: https://vk.cc/cIZCSZ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека C/C++ разработчика

📌 Оптимизация кода в C++: Используем std::move правильно!

Привет, друзья! Сегодня я расскажу об одной из самых частых ошибок, связанных с std::move. Многие знают, что std::move не перемещает объект, а лишь превращает его в rvalue. Но как его использовать правильно? Давайте разбираться!

❌ Ошибка: Бессмысленный std::move


std::string getString() {
std::string str = "Hello, world!";
return std::move(str); // ❌ Неэффективно
}

Что здесь не так? Возвращаемый std::string и так является временным объектом (NRVO — оптимизация возврата), и std::move мешает этой оптимизации! В результате компилятор не сможет выполнить перемещение, а вызовет копирование.

Правильный вариант:

std::string getString() {
return "Hello, world!"; // ✅ NRVO оптимизация
}


🏆 Где std::move полезен?
Используйте std::move, когда точно знаете, что объект больше не нужен и его можно переместить:

void processString(std::string str) { /* ... */ }

int main() {
std::string s = "Example";
processString(std::move(s)); // 🔥 Теперь перемещение!
}


⚡ Советы:
1️⃣ Не используйте std::move при возврате локальных объектов — дайте компилятору сделать свое дело!
2️⃣ Используйте std::move, когда объект больше не нужен — это ускорит работу кода.
3️⃣ После std::move не используйте переменную, кроме как для присвоения нового значения.

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

👩‍💻 C++: не просто язык, а ключ к карьере в топовой IT-компании!

Повышение квалификации на курсе «C++ Developer. Professional» — ваш ключ к тому, чтобы прокачать навыки и стать востребованным разработчиком.

Что вас ждёт:

— Работа с новыми стандартами C++20 и C++23.
— 14 практических работ для портфолио.
— Освоение многопоточного программирования, сетей и работы с данными.
— Понимание паттернов проектирования и тонкостей языка.

Почему выбирают нас?

— Преподаватели — опытные эксперты из ведущих IT-компаний.
— Живые лекции, поддержка на каждом этапе обучения.
— Диплом OTUS, который ценят работодатели.

🔥 До 28.02 скидка на все курсы 10%, кроме этого дарим промокод CPPPRO2025_02 который прибавляет к скидке еще 5% !!!

🎫 Курс можно приобрести в рассрочку

➡️ Пройти тест и забрать скидку: https://vk.cc/cIX0dR

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека C/C++ разработчика

Проект для мидлов:
создайте курс для Яндекс Практикума!

Яндекс Практикум — сервис современного онлайн-образования, где обучают актуальным цифровым профессиям. Сейчас есть возможность присоединиться к команде и разработать курс C++ разработчика.

Роль автора подойдёт тем, кто любит погрузиться с головой в контент — разрабатывать уроки, задания, тесты, чек-листы, памятки, квизы; нагрузка от 10 часов в неделю.

Будущего коллегу окружим комфортом:
▪︎ сотрудничайте с нами удалённо,
▪︎ получайте дополнительный доход,
▪︎ влейтесь в наше энергичное и яркое комьюнити!

Посмотрите, что ожидают от кандидата, и откликайтесь, если интересно.

Читать полностью…

Библиотека C/C++ разработчика

Приглашаем на встречу РГ21 по C++

Приходите обсудить новости последней встречи международного комитета по стандартизации языка. Ещё в программе — ответы на ваши вопросы о стандарте С++ и афтерпати.

Встречу проведёт Антон Полухин, руководитель группы разработки общих компонентов Техплатформы городских сервисов Яндекса.

Москва, онлайн и офлайн 25 марта.

Регистрируйтесь.

Читать полностью…

Библиотека C/C++ разработчика

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Dear ImGui — это мощная библиотека для создания графических интерфейсов пользователя (GUI) с использованием C++. Она ориентирована на разработчиков, которым нужен быстрый и удобный способ добавления интерфейса в приложения, такие как инструменты отладки, редакторы и визуализаторы.

Особенности:
- Простота и скорость — не требует сложной инициализации и минимально нагружает рендеринг.
- Независимость от платформы — можно использовать с OpenGL, Vulkan, DirectX и другими графическими API.
- Гибкость — позволяет создавать сложные UI-компоненты с минимальным количеством кода.
- Активное сообщество — регулярные обновления и множество готовых решений.

ИмGui подходит для использования в геймдеве, графических редакторах, утилитах для работы с данными и других проектах, требующих быстрого и интерактивного интерфейса.

https://github.com/ocornut/imgui

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Подборка Telegram каналов для программистов

/channel/lifeproger Жизнь программиста. Авторский канал.
/channel/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
/channel/rabota1C_rus 1С Работа

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Библиотека C/C++ разработчика

✅ Пишете код на C, но как только дело доходит до структур и массивов — начинается хаос?

Указатели путаются, память ведет себя странно, а программы работают не так, как задумано. Еще немного — и кажется, что проще уйти в Python.
Но ведь C — основа программирования, а низкоуровневые знания делают из программиста профессионала.

Представьте, что вы можете уверенно работать со структурами, оптимизировать код и писать эффективные приложения.

На открытом вебинаре 27 февраля в 20:00 мск «Структуры и массивы Си в действии: Пишем менеджер библиотеки» мы разберем работу со структурами и массивами в C на практике: создадим систему учета книг, напишем код без классов и научимся грамотно управлять памятью.

Регистрируйтесь, если хотите перестать бояться указателей и разобраться в структурном программировании на C. Бонус — скидка на большое обучение «Программист С» для участников урока.

➡️ Регистрация открыта: https://vk.cc/cINX2T

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека C/C++ разработчика

📌 Уменьшаем размер исполняемого файла в C++

Всем добрый вечер! Хочу поделиться парой трюков, которые помогут уменьшить размер исполняемого файла вашей программы на C++. Это полезно, если вы пишете под встраиваемые системы, создаёте утилиты или просто хотите более компактный бинарник.

🔹 1. Отключаем отладочную информацию
Компиляторы по умолчанию добавляют отладочные символы в бинарник. Их можно убрать флагами:


g++ -o my_program my_program.cpp -O2 -s

Флаг -s удаляет все отладочные символы.

🔹 2. Оптимизируем код
Используйте -O2 или -Os, чтобы компилятор оптимизировал код для уменьшения размера:

g++ -o my_program my_program.cpp -Os

Флаг -Os специально оптимизирует код для минимального размера.

🔹 3. Статическая или динамическая линковка?
Если в системе уже есть нужные библиотеки, используйте динамическую линковку (-shared для .so в Linux, /MD в MSVC).
Но иногда статическая линковка (флаг -static) позволяет избавиться от лишних зависимостей.

🔹 4. Убираем ненужные зависимости
Можно использовать strip, чтобы дополнительно очистить бинарник:

strip my_program

А ещё, если пишете на C++, то не забывайте про -ffunction-sections -fdata-sections и --gc-sections, чтобы убрать неиспользуемый код.

🔹 5. Убираем RTTI и исключения
Если не используете dynamic_cast и исключения, отключите их:

g++ -o my_program my_program.cpp -Os -fno-rtti -fno-exceptions

Это существенно уменьшит размер!


#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Улучшенные версии STL-контейнеров из библиотеки Boost
Илья Мещерин

В любом учебном курсе по C++, даже начального уровня, обязательно изучают, как устроен std::vector. Детали внутреннего устройства std::vector в подробностях продолжают изучать в вузах, спрашивать на собеседованиях, обсуждать на конференциях. То же самое происходит с контейнерами std::list, std::deque, std::map и std::unordered_map: про их реализацию и особенности внутреннего устройства можно говорить бесконечно долго, про них все еще делают доклады, снимают лекции и пишут статьи. И их продолжают использовать в продакшен-коде даже в самых крупных и известных компаниях.

При этом в библиотеке Boost давным-давно есть альтернативные версии контейнеров, которые выигрывают у стандартных по многим показателям. Однако об этих версиях почти никто не знает, о них почти нет лекций, статей и докладов. Пора положить этому конец и разобраться в том, как еще могут быть устроены контейнеры, помимо тех версий из STL, о которых и так все знают.

Спикер обсудил внутреннее устройство не таких уж стандартных контейнеров: stable_vector, devector, bimap, circular_buffer, а также интрузивных версий list, map, unordered_map и их разновидностей.

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

📌 5 способов ускорить компиляцию C++ проекта

Всем доброго вечера, или утра✌️Компиляция C++ — боль, особенно на больших проектах. Сегодня расскажу, как ускорить этот процесс.

🚀 1. Используйте ccache
🔹 ccache кеширует результаты компиляции и повторно использует их при неизменности исходного кода.
🔹 Установка (Linux/macOS):


sudo apt install ccache # для Ubuntu
brew install ccache # для macOS

🔹 Использование:

export CC="ccache g++"
export CXX="ccache g++"


⚡ 2. Включите -j в make
🔹 Используйте make -jN, где N — количество потоков. Например:

make -j$(nproc) # на Linux
make -j$(sysctl -n hw.ncpu) # на macOS

🔹 Это позволяет компилятору использовать несколько ядер процессора.

🔥 3. Используйте pch (предкомпилированные заголовки)
🔹 Если у вас много инклудов в .cpp файлах, создайте pch файл:

// stdafx.h
#include <iostream>
#include <vector>
#include <map>


g++ -o stdafx.pch stdafx.h

🔹 Теперь подключайте stdafx.pch вместо кучи инклудов.

💨 4. Разделяйте сборку на модули
🔹 Используйте Unity Build (объединение нескольких .cpp в один).
🔹 Или попробуйте C++ модули (`export module`) в новых компиляторах.

🏎️ 5. Собирайте в Release с оптимизациями
🔹 Используйте -O2 или -O3, если важна скорость.
🔹 Для дебага — -Og:

g++ -Og -g main.cpp -o main


Как вы ускоряете сборку? Пишите в комментариях! 🚀

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

C++ Russia 2025 — конференция с техническими докладами про перформанс, оптимизации, многопоточность и инструменты С++

🧑‍💻 13 марта онлайн
📍 20–21 марта в Москве в отеле «МонАрх»

Вас ждут 39 докладов от 47 спикеров о многопоточности, новых стандартах, компиляторах и неочевидных нюансах C++.

Практикующие инженеры и техлиды разберут:

Оптимизации userver: неожиданные способы ускорения shared_ptr, экономии памяти и балансировки.
Type erasure в деталях: как оборачивать полиморфные объекты со «стертыми» типами.
Branch prediction: как работает спекулятивное исполнение и как оптимизировать код в критических местах.

Больше докладов — в расписании.

Билеты уже на сайте. Если оплачиваете самостоятельно — промокод CPPLIB дает скидку 15% на билеты «Для частных лиц».

Реклама. ООО «Джуг Ру Груп». ИНН 7801341446

Читать полностью…

Библиотека C/C++ разработчика

Game++. Building arcs

Прежде чем рассказать про архитектуры игровых движков, я подумал, что будет полезно немного рассказать о том, как я понимаю архитектуру ПО и как это связано с играми. Во-первых они (архитектуры) есть, чтобы бы там не врали про игрострой. Во-вторых их оказывается больше одной. Это, возможно, поможет вам понять, почему остальные статьи написаны в таком порядке, или без какого-то порядка. В худшем случае, когда вас втянут в спор о том, насколько отвратительны (или, наоборот, потрясающе гениальны) отдельные игровые движки и их архитектуры, у вас будет пара аргументов и понимание что к чему.

Символично, что статья про архитектуру игрового движка появилась после того, как было рассказано про строки, мультипоток, применение алгоритмов: просто оно так и в жизни получается, мы сначала пишем код, редактор, игру - костяк проекта обрастает мясом, и тут нас догоняют проблемы, на которые все забивали, потому что надо было выдать хоть что-то похожее на работающий вариант. Но от того, что мы забивали на проблемы и заметали их под коврик беклога, проблемами быть они не перестали.

Вы не получите из статьи знаний об аллокаторах, контейнерах, или математике, стоящей за физикой игры. Так же я не ставлю целью научить вас, как применять A* разбиение в поиске пути неписей или моделировать реверберацию комнаты. Вместо этого есть размышления о коде между всем этим. И даже не столько про написание кода, сколько о его организации.

https://habr.com/ru/articles/885780/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

С++ и безопасность: правда ли все так плохо?

Сергей проанализировал недавний отчет NSA и рассказал, так ли плохо обстоят дела с безопасностью в С++ на самом деле и что современная индустрия предлагает для решения этого вопроса.

Он разобрал проблемы с безопасностью в С++ на открытых примерах из Chromium, среди которых:
— работа с памятью;
— UB;
— C legacy, строки, арифметика, преобразования типов.

Спикер также показал различные подходы к митигации описанных проблем, в частности:
— статический анализ;
— динамический анализ;
— фаззинг-тестирование;
— харденинг;
— выделение безопасных подмножеств языка: Misra, AUTOSAR, стандарт Google;
— методология SDL как комплексное решение;
— (бонус) подход KasperskyOS по определению недоверенных компонентов, допускающих наличие уязвимостей, но без возможности их проэксплуатировать и развить атаку.

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

🚀Это отличный ресурс для программистов, работающих с C++. Можно найти подробную документацию по стандартной библиотеке, STL, различным версиям стандарта C++, а также примеры кода и объяснения по ключевым аспектам языка.

Справочник по C++
C++11, C++14, C++17, C++20, C++23, C++26 │ Поддержка компиляторами C++11, C++14, C++17, C++20, C++23, C++26

Справочник по языку C
C89, C95, C99, C11, C17, C23 │ Поддержка компиляторами C99, C23


https://ru.cppreference.com/w/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Получите оффер в YADRO всего за 3 дня! 🚀

Компания-лидер инженерной индустрии в России YADRO приглашает C++ Software Engineer на SPRINT OFFER.

Команда Телеком ждёт кандидатов сразу в два направления: Telecom Platform и Разработка базовых станций с поддержкой LTE/GSM и 5G Core.

Если вам интересно принять участие в разработке первых российский базовых станций стандартов GSM/LTE — присоединяйтесь к команде Телеком. Вы будете с нуля создавать решения для беспроводных мобильных сетей и сопутствующих услуг: от исследований и прототипирования до вывода в коммерческое использование.

Большую часть кода разработчики пишут на C++. В зависимости от компонента применяют как последние «фишки» С++20, так и занимаются низкоуровневой оптимизацией кода для повышения производительности.

🔵 Читайте подробности на сайте и оставляйте заявку до 9 марта → по ссылке.

Присоединяйтесь к проекту, где сможете создавать системы, которыми будут пользоваться сотни тысяч людей!

Читать полностью…

Библиотека C/C++ разработчика

Сборка C++ проектов. Пакетный менеджер CONAN. Game Engine серии

0:00:00 - Введение
0:02:43 - Conan. Теория
0:07:31 - Conan. Установка
0:10:44 - Conan. Базовая настройка
0:17:04 - ConanCenter. JSON
0:34:46 - GTest
0:54:43 - Chuck Norris API, cpr
1:15:19 - Автоматизация сборок

источник

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

📌 Оптимизация использования std::unordered_map в C++

Сегодня я расскажу вам, как оптимизировать работу std::unordered_map и избежать неожиданных тормозов.

std::unordered_map — мощная хеш-таблица в C++, но при неправильном использовании она может замедлить ваш код. Давайте разберем основные моменты, которые помогут избежать проблем.



🔥 1. Выбирайте правильный хеш-функтор
По умолчанию std::unordered_map использует std::hash<Key>, но если ключ — это пользовательский тип данных (например, struct`), то стандартного `std::hash не существует, и придется писать свой.

Пример кастомного хеша для структуры:


struct MyKey {
int x, y;

bool operator==(const MyKey& other) const {
return x == other.x && y == other.y;
}
};

struct MyHash {
size_t operator()(const MyKey& key) const {
return std::hash<int>{}(key.x) ^ (std::hash<int>{}(key.y) << 1);
}
};

std::unordered_map<MyKey, std::string, MyHash> my_map;

Используем ^ (XOR) и << (битовый сдвиг), чтобы уменьшить коллизии.



⚡ 2. Контролируйте размер bucket'ов
Если std::unordered_map сильно увеличивается, он перехеширует (rehash), что может быть дорогой операцией. Чтобы избежать лишних перераспределений:

my_map.reserve(10000); // Подготавливаем место под 10,000 элементов

Это ускорит вставку, так как уменьшит количество перераспределений памяти.



🚀 3. Избегайте ненужного копирования ключей
Если ключ — это сложный объект, избегайте его копирования:

std::unordered_map<std::string, int> data;
std::string key = "long_key_string";

int value = data[key]; // ❌ НЕ ЭФФЕКТИВНО: создаст пустую запись, если ключа нет
int value = data.at(key); // ✅ БЫСТРЕЕ: выбросит исключение, если ключа нет

Еще лучше использовать find():

auto it = data.find(key);
if (it != data.end()) {
int value = it->second;
}




🏆 Вывод
✅ Используйте кастомные хеш-функции, если ключи нестандартные
✅ Резервируйте память заранее (reserve)
✅ Уменьшайте копирование ключей, используя find() и at()

А вы используете std::unordered_map в своих проектах? Может, у вас есть свои фишки? Пишите в комментариях! 👇🚀

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Создаем эмулятор Sega Mega Drive на C++

В этой статье описано создание эмулятора 16-битной приставки Sega Mega Drive на C++.

Будет много интересного: эмуляция процессора Motorola 68000, реверсинг игр, графика на OpenGL, шейдеры, и многое другое. И все это на современном C++. В статье много картинок, можно хоть на них посмотреть.

https://habr.com/ru/articles/871284/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

Ваш код тормозит под нагрузкой?

Не справляется с задачами параллельного вычисления?

💡 Приходите на открытый урок по многопоточному программированию C++!

▫️Вместе напишем многопоточную реализацию задачи подсчёта суммы чисел.
▫️Разберём примитивы синхронизации.
▫️Ускорим код с помощью стандартной библиотеки.

🎯 Вы начнёте осваивать многопоточное программирование и сделаете первый шаг к позициям middle+ в C++!

А ещё получите скидку на большое обучение «C++ Developer».

📅 Успейте записаться на открытый вебинар 25 февраля в 20:00 (мск)!

🔗 Регистрируйтесь прямо сейчас и узнайте, как эффективно управлять потоками в C++: https://vk.cc/cISn4e

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека C/C++ разработчика

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

📌 Оптимизация кода: std::string_view вместо std::string

Привет, друзья! Сегодня хочу рассказать про std::string_view — полезный инструмент, который может значительно ускорить работу с строками в C++. Многие из вас, вероятно, используют std::string, но не всегда это лучший выбор.

❓ Что такое std::string_view?
Это некопируемая, легковесная оболочка над строковыми данными. Она просто хранит указатель на начало строки и её длину, не создавая копии. Использование std::string_view вместо std::string позволяет избежать ненужных аллокаций памяти и ускорить код.

🔥 Пример использования:


#include <iostream>
#include <string_view>

void print(std::string_view str) { // Без лишнего копирования
std::cout << str << '\n';
}

int main() {
std::string s = "Hello, world!";
print(s); // Можно передавать std::string
print("Hi there"); // Можно передавать строковый литерал
}


🛠 Когда использовать?
✅ При передаче строк в функции, если их не нужно модифицировать.
✅ Для работы с подстроками (в отличие от std::string::substr, который делает копию).
✅ Для обработки строк без создания динамических объектов.

⚠️ Важно помнить:
- std::string_view не владеет данными, поэтому нельзя использовать его для длительного хранения указателей на временные строки.
- Нужно быть осторожным с объектами, чей срок жизни может закончиться, пока std::string_view ещё используется.

🚀 Итог:
Использование std::string_view вместо const std::string& может ускорить работу с текстовыми данными и снизить нагрузку на аллокатор. Если не нужно изменять строку — это отличный выбор!

А вы уже используете std::string_view в своих проектах? Делитесь в комментариях! ⬇️

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

C++26 — встреча ISO в Хагенберге

В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++.

В этот раз прорабатывались следующие большие темы:
std::hive
Constexpr, ещё больше constexpr
Безопасность, контракты, hardening, профили, UB и std::launder
Relocate
#embed

https://habr.com/ru/companies/yandex/articles/882518/

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/C++ разработчика

⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти

Вот отсортированная база с тонной материала (постепенно пополняется):

БАЗА (4687 видео/книг):

(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR


Скачивать ничего не нужно — все выложили в Telegram

Читать полностью…
Subscribe to a channel