Библиотека C/C++ разработчика | cpp, boost, qt
20.7K subscribers
1.66K photos
44 videos
16 files
3.84K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🧱 Для чего нужны плоские контейнеры и как их использовать

💡 В C++23 появились долгожданные «плоские» контейнеры: flat_set, flat_map, flat_multiset и flat_multimap — адаптеры, которые используют обычные векторы вместо деревьев.

❗️ Ключевые особенности:

• поиск O(log N) как в обычном set, но быстрее на практике
• итерация в разы быстрее классических контейнеров
• потребление памяти меньше на сотни процентов
• вставка и удаление катастрофически медленные O(N)

Основная идея — хранить данные в отсортированном векторе и использовать бинарный поиск. std::flat_map даже хранит ключи и значения в отдельных контейнерах для лучшей производительности.

Идеально подходят для сценариев «заполнил один раз — читаю много раз». Особенно эффективны при работе с миллионами элементов и компактными ключами.

⚠️ Не используйте их, если планируете частые вставки и удаления — в таких случаях классические std::set/map или unordered-контейнеры будут эффективнее.

🔜Статья

Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴 Средний разработчик меняет работу каждые 1,5 года

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

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

😳 О чем говорим откровенно:
— Job-hopping и что за этим стоит
— Red flags, которые мгновенно убивают мотивацию
— Реальные источники вакансий (не те, что рекламируют)
— Боль от общения с рекрутерами
— Сколько этапов отбора — норма, а сколько — издевательство

Когда мы объединим опыт сотен IT-специалистов, получится настоящая карта того, как устроена индустрия. Не по версии HR-отделов, а по версии тех, кто пишет код, тестирует продукты и двигает технологии вперед.

🚀 Участвовать в исследовании → https://clc.to/9aaXVg
Please open Telegram to view this post
VIEW IN TELEGRAM
Вакансии «Библиотеки программиста»

Привет! Мы ищем контент-менеджеров, которые будут вести наши телеграм-каналы о разработке.

👾 Требования:
— знать принципы залетающего контента
— разбираться в темах, связанных с разработкой

Большим плюсом будет навык программирования на каких-либо языках.

Условия:
— удаленка
— частичная занятость
— сдельная оплата в зависимости от количества задач

🔥 Оставляйте отклик, и мы свяжемся с вами: https://forms.gle/o4BZnsQ526JoqsCq9
🏖️ Подборка вакансий для C++-разработчиков за неделю

Разработчик C++ — до 220 000 ₽ Гибрид (Москва)

Middle C++ Разработчик — до 700 000₽ Офис (Москва)

Инженер-разработчик С++ — до 200 000 ₽ Гибрид (Москва)

Программист микроконтроллеров C++ — до 180 000₽ Офис (Новосибирск)

Senior C++ Developer/Tech Lead — от 400 000 ₽ Гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале C++ jobs

Библиотека C/C++ разработчика
🔧 Как правильно передать данные в std::thread

Передача параметров в потоки — источник багов даже у опытных разработчиков. Главная проблема: время жизни объектов и способы передачи.

Пошаговое решение:

1️⃣ Используйте std::ref для ссылок
2️⃣ Копируйте простые типы по значению
3️⃣ Перемещайте тяжелые объекты через std::move
4️⃣ Избегайте сырых указателей

#include <thread>
#include <string>

void process_data(int value, const std::string& text, std::vector<int>& result) {
// Обработка данных
result.push_back(value);
}

int main() {
int number = 42;
std::string message = "Hello";
std::vector<int> results;

// Правильная передача параметров
std::thread t(process_data, number,
std::cref(message), // const ссылка
std::ref(results)); // обычная ссылка

t.join();
return 0;
}



⚠️ Частые ошибки:

• Передача ссылок без std::ref
• Доступ к локальным переменным после их уничтожения


💡 При сомнениях используйте передачу по значению🤓

Библиотека C/C++ разработчика #буст
😡 А вас тоже бесят облачные сервисы?

Согласитесь, статус отношений с облаками — все сложно. Но что, если можно изменить правила игры?

Мы готовим нечто особенное в мире облачных технологий, но сначала хотим услышать правду от тех, кто реально работает с облаками каждый день.

Что мы хотим узнать:
— Для чего вы реально используете облако?
— Чего катастрофически не хватает прямо сейчас?
— Что бесит больше всего? (можно материться)
— Как выбираете провайдера — по цене или по любви?
— и тому подобное

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

️Время на опрос: меньше, чем на кофе-брейк. Жмите → https://clc.to/nboYDA
Офер VK для бэкенд-разработчиков за выходные

VK проводит Weekend Offer для бэкенд-разработчиков. Если вы больше 3 лет пишете на Java, Go, Python или C++ — у вас есть все шансы получить приглашение на работу за 2 дня: технические собеседования 28 июня, а финалы, знакомство с командами и офер 29 июня.

Отправляйте заявку до 25 июня и станьте частью VK! Подробнее о мероприятии — на сайте.
🧱Статья: Управление зависимостями на C++ с помощью vcpkg

Автор статьи демонстрирует создание полноценной экосистемы управления зависимостями на базе vcpkg с собственными реестрами и серверным кэшированием.


❗️ Ключевые моменты статьи:

• создание custom registry с собственными портами Qt5/Boost нужных версий
• сборка standalone окружений, полностью отвязанных от основного vcpkg
• организация кэширования бинарей через nuget-сервер (как в Conan)

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

Особенно актуально для enterprise-проектов с жесткими требованиями к воспроизводимости сборок и CI/CD пайплайнами.

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

👉 Статья

Библиотека C/C++ разработчика
⚡️ Фича дня: if consteval в C++23

Хотите разный код для compile-time и runtime? C++23 добавляет if consteval для условной компиляции!


🔴 До: Сложные трюки

template<typename T>
constexpr T compute() {
if (std::is_constant_evaluated()) {
return compile_time_version<T>();
}
return runtime_version<T>();
}



🟢 После: Читаемый consteval

template<typename T>
constexpr T compute() {
if consteval {
return compile_time_version<T>();
} else {
return runtime_version<T>();
}
}



❗️Практические применения:

• Оптимизированные математические библиотеки
• Compile-time криптография
• Генерация lookup-таблиц


💡Используете метапрограммирование в ваших проектах?

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
✏️ Промпт дня: Следуй стандартам кода в C++

Если необходимо быстро привести код к определённому стилю, то этом случае можно воспользоваться следующим промптом.


🍴 Промпт для AI-помощника:

Rewrite the code below following the Google style guidelines for C++.

[Вставь свой код]



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

Было:

class userManager{
public:
int getUserCount(){return userCount;}
void setUserCount(int count){userCount=count;}
private:
int userCount;
};

void ProcessUserData(){
const int maxUsers=100;
userManager um;
for(int i=0;i<maxUsers;i++){
um.setUserCount(i);
}
}


Стало (после применения Google C++ Style Guide):

class UserManager {
public:
int GetUserCount() const { return user_count_; }
void SetUserCount(int count) { user_count_ = count; }

private:
int user_count_;
};

void ProcessUserData() {
const int MAX_USERS = 100;
UserManager user_manager;

for (int i = 0; i < MAX_USERS; ++i) {
user_manager.SetUserCount(i);
}
}


Что изменилось:

Функции в CamelCase
Переменные в snake_case
Константы в UPPER_CASE
Правильные отступы и пробелы


⛄️ А каким стилем для кода вы пользуетесь? Пишите в комментариях.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌧️ Облачная терапия: время выговориться!

Знакомая ситуация? Покупаете облако как BMW, а получаете телегу с квадратными колесами. Обещают 99.9% uptime, а сервер падает на релизе. Техподдержка отвечает через сутки фразой «попробуйте перезагрузить».

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

🤫О чем спросим:
— Зачем вам вообще это облако нужно
— Какие косяки достали до печенок
— Сколько денег утекает в никуда ежемесячно
— Что должно случиться, чтобы вы сменили провайдера
— И еще пару каверзных вопросов

⏱️ 2 минуты честности = большое исследование без воды → https://clc.to/nboYDA
😎 Как начать писать свой проект на Unreal Engine 5

💡 Эта история — не просто дневник разработчика, а честный рассказ о боли, решимости и технических подводных камнях, с которыми сталкиваешься, когда решаешь написать свой VR-движок на UE5.

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

• почему переход с Unity на Unreal не всегда гладкий
• как в одиночку освоить UE5 и C++ для написания плагинов
• какие возможности и ограничения есть у движка «из коробки»

Главный фокус — личный опыт перехода от Java и Unity к полному погружению в экосистему Unreal Engine с её модульной архитектурой, плагинами, Blueprints и C++.

❗️Пост особенно полезен разработчикам, кто:

• планирует создавать сложные системы на UE5
• хочет понять реальную стоимость «модульной архитектуры»
• интересуется плагинами и расширениями движка на C++

💬 Итог: Unreal мощный, но не идеальный.

👉 История

Библиотека C/C++ разработчика
‼️ Hotkey boost: Генерация документации Doxygen одной командой

Проблема: Написание документации для C++ кода — трудоемкий процесс, который разработчики часто откладывают или вовсе пропускают.

Решение: Автоматическая генерация шаблонов документации Doxygen для классов и функций!


Доступно в:

• CLion: /** + Enter перед объявлением функции/класса
• VSCode (с Doxygen Documentation Generator): Ctrl+Alt+D
• Visual Studio: /// + Enter перед функцией


✏️ В CLion:

• Установите курсор перед объявлением функции или класса
• Введите /**
• Нажмите Enter
• IDE автоматически создаст шаблон документации со всеми параметрами.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌀🚀 Мастерство STL алгоритмов в C++

Устал писать циклы for для каждой мелочи? Стандартная библиотека C++ уже содержит все необходимые алгоритмы — оптимизированные, протестированные и готовые к бою. Время перестать изобретать велосипед и начать использовать силу STL на полную.

💡 На карточках — 5 категорий алгоритмов с примерами для мгновенного применения.

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