en
Feedback
Библиотека C/C++ разработчика | cpp, boost, qt

Библиотека C/C++ разработчика | cpp, boost, qt

Open in Telegram

Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

Show more
19 601
Subscribers
-624 hours
-477 days
-16130 days
Posts Archive
🍪 Чем ranges::iota отличается от std::iota под капотом? C++20 принёс std::ranges::iota, который выглядит как улучшенная версия старого std::iota. Но это не просто API-обёртка — механизм работы совершенно другой. ✏️ std::iota — eager алгоритм:
std::iota(v.begin(), v.end(), 0);
Выполняется немедленно, проходит по контейнеру один раз, записывает значения. После вызова вектор заполнен. ✏️ ranges::iota — ленивая view:
auto view = std::views::iota(0, 10);
Возвращает view — лёгкий объект, который генерирует значения по требованию. Внутри это просто два поля:
struct iota_view {
    T current_;
    T bound_;
    
    T operator*() const { return current_; }
    void operator++() { ++current_; }
};
Никакого выделения памяти! View не хранит элементы, он вычисляет их при обращении. Это O(1) по памяти против O(N) для std::iota. 💡 Композиция views:
auto result = views::iota(0, 100) 
            | views::filter([](int x) { return x % 2 == 0; })
            | views::take(10);
Компилятор inline'ит всю цепочку в один проход. Нет промежуточных контейнеров, нет лишних аллокаций. Просто счётчик и предикат. ❗️Практический вывод: если вам нужен материализованный контейнер — std::iota. Если цепочка преобразований — ranges::iota. Разные инструменты для разных задач. ❗️Ranges — это не замена алгоритмов, это другая парадигма. Библиотека C/C++ разработчика #под_капотом
Show all...
👍 6 2
Photo unavailableShow in Telegram
⚙️ ObjectBox: встраиваемая БД для C/C++, которая реально быстрая Если вы устали от SQLite и ищете что-то более производительное для мобильных приложений или IoT-устройств — взгляните на ObjectBox. 📕 Что это за зверь? Объектно-ориентированная встраиваемая база данных с открытым исходным кодом. Написана на C, но имеет отличные биндинги для C++. ❗ Почему это интересно: On-device векторная БД — управление векторными данными и быстрый vector search из коробки • Минимальные ресурсы — бинарник всего ~1 МБ, идеально для IoT-шлюзов, микроконтроллеров, ECU • Встроенные связи — отношения между объектами работают нативно • Статическая типизация — проверки и оптимизации на этапе компиляции • Автоматические миграции схемы — никаких update-скриптов • ObjectBox Sync — синхронизация данных между устройствами и серверами 👉 GitHub 🤌 Бонусы для подписчиков: Скидка 40% на все курсы Академии Розыгрыш Apple MacBook Бесплатный тест на знание математики Библиотека C/C++ разработчика #буст
Show all...
👍 3❤‍🔥 2🥰 1
Photo unavailableShow in Telegram
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++. 😎 Полезное:Перестаньте ждать, пока вас найдут — полезные советы по поиску работы • Как защитить себя от увольнения — способы избежать преждевременного увольнения • Inline static в классах — альтернативный способ инициализации static переменных появившийся в C++17 • Типичные ошибки со structured bindings — список наиболее популярных ошибок при использовании structured bindings • Как zip итерирует несколько ranges одновременно без накладных расходов? — практический пример использования функции zip • Readability checks — пример использования clang-tidy для отслеживания правильного именования классов, методов и переменных 🤌 Бонусы для подписчиков: Скидка 40% на все курсы Академии Розыгрыш Apple MacBook Бесплатный тест на знание математики Библиотека C/C++ разработчика #свежак
Show all...
3👍 1
00:11
Video unavailableShow in Telegram
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие? Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу. 📌 Почему без математики в AI никуда: → Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде. → Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit(). 🎓 Что будет на курсе: → 3 практических задания на Python + финальный проект с разбором от специалистов; → программа обновлена в ноябре 2025; → за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями; → преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии. 🎁 Бонусы ноября: — 40% скидка; — получаешь курс «Школьная математика» в подарок; — короткий тест и узнать свой уровень. 🔗 Подробнее о курсе
Show all...
Шаблоны_для_рилсов_и_stories_1080_x_1920_пикс_2025_11_29T09.mp47.25 KB
1😁 1
Repost from TgId: 1940255915
Photo unavailableShow in Telegram
Show all...
😁 3
Repost from TgId: 1162036880
Photo unavailableShow in Telegram
😁 16
🐸 Подборка вакансий для C++-разработчиков за неделю C++ разработчик (Trading / Low Latency) — от 500 000 ₽ Удалёнка, гибрид (Москва) C++ разработчик в Ads Core — Удалёнка Разработчик инфраструктуры (Алиса) — от 220 000 и до 490 000 ₽ Гибрид (Москва) Разработчик C++ / Rust (SDN dataplane, DPDK/DOCA API) — Удалёнка, гибрид (Москва) C++ Developer Senior — от 254 000 и до 315 000 ₽ Удалёнка Библиотека C/C++ разработчика
Show all...
😁 1
Photo unavailableShow in Telegram
⚙️ Auto-fix может сломать код Clang-Tidy умеет автоматически исправлять найденные проблемы через флаг --fix. Звучит заманчиво, но это мина замедленного действия. Инструмент может заменить raw pointer на smart pointer, но не учтёт семантику владения в вашей кодовой базе. Или «исправит» цикл, изменив логику работы программы. Auto-fix хорош для механических изменений: замена NULL на nullptr, добавление override, форматирование. Для сложных рефакторингов — только manual review каждого изменения. Золотое правило: запускайте --fix на отдельной ветке, прогоняйте все тесты, делайте code review автоматических изменений. 😏 А вы доверяете автоматическим исправлениям или проверяете каждое изменение вручную? 🔹 Курс «Алгоритмы и структуры данных» 🔹 Получить консультацию менеджера 🔹 Сайт Академии🔹Сайт Proglib Библиотека C/C++ разработчика #междусобойчик
Show all...
👍 7 1
Photo unavailableShow in Telegram
🔥 На рынке сейчас математика — снова король: AI растёт быстрее, чем вузы успевают обновлять программы. Мы же перестраиваем курс под индустрию мгновенно. Хочешь наконец разобраться в математике для DS, а не гуглить «что такое градиент» перед собесом? Новый курс «Математика для разработки AI-моделей» — это 8 недель плотной подготовки, свежая программа и только актуальные темы, которые реально нужны в ML. Что в курсе: → линал, производные, градиенты, вероятности, статистика; → практика на Python и 3 большие ДЗ; → живые вебинары + разбор ваших вопросов; → финальный мини-проект, который можно положить в портфолио; → доступ к материалам и чат с экспертами. Для старта нужны только школьная математика и базовый Python. 🎁 Бонусы ноября: — скидка 40% до 30 ноября; — «Базовая математика» в подарок при оплате; → бесплатный тест уровня математики. 👉 Записывайся на курс
Show all...
😁 1
🎵 Readability checks — код для людей Категория readability-*, в линтере clang-tidy, следит за стилем, именованием и общей читаемостью. Как code review, но автоматический. 🍴 Пример naming conventions:
// Плохо:
class myClass { // ❌ нарушение стиля
    int M_Data; // ❌ венгерская нотация
    void DO_SOMETHING(); // ❌ UPPERCASE для функций
};

// Хорошо:
class MyClass { // ✅ PascalCase для классов
    int m_data; // ✅ единый стиль
    void doSomething(); // ✅ camelCase для методов
};
✏️ Конфигурация naming:
CheckOptions:
  - key: readability-identifier-naming.ClassCase
    value: CamelCase
  - key: readability-identifier-naming.PrivateMemberPrefix
    value: m_
  - key: readability-identifier-naming.FunctionCase
    value: camelBack
  - key: readability-identifier-naming.ConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.NamespaceCase
    value: lower_case
🥳 Другие проверки:
// 1. Magic numbers
const int SIZE = 100; // ✅
int arr[100]; // ❌ magic number

// 2. Complex условия
if (a && b || c && !d && (e || f)) { // ❌
}

bool condition = a && b || c && !d && (e || f);
if (condition) { // ✅ Выносим в переменную
}

// 3. Длинные функции
void process() {
    // 200 lines of code // ❌
}
// readability-function-size предупредит

// 4. Implicit conversions
int x = 3.14; // ❌
int x = static_cast<int>(3.14); // ✅
‼️ Популярные проверки:
Checks: >
  readability-identifier-naming,
  readability-magic-numbers,
  readability-function-size,
  readability-simplify-boolean-expr,
  readability-else-after-return,
  readability-braces-around-statements,
  readability-implicit-bool-conversion
💡 Best practice: Договорись о naming convention в команде и зафиксируй в .clang-tidy. 🐤 Какой naming convention у тебя? 🔹 Курс «Алгоритмы и структуры данных» 🔹 Получить консультацию менеджера 🔹 Сайт Академии () 🔹Сайт Proglib Библиотека C/C++ разработчика #константная_правильность
Show all...
🔥 7 3👍 1👾 1
Photo unavailableShow in Telegram
Доклад с С++ Russia: как выжать на 1% больше из NVIDIA RTX через переупорядочивание кода
Когда у тебя в продакшене сотни тысяч видеокарт, даже один процент производительности — это серьезные деньги.
Михаил Лукин из компании Судо рассказал, как они 70 дней бенчмаркили разные варианты инструкций. 📹 Code reordering для compute-bound задач на примере CUDA Часовой доклад о микроархитектурной оптимизации для RTX 30-й и 40-й серий. Узнаешь, почему целочисленные операции до сих пор в 64 раза медленнее floating-point и как обмануть компилятор NVCC. Если работаешь с CUDA на production-нагрузках — сохрани в закладки. Где вы обычно теряете производительность на GPU? 👉 Доклад 🔹 Курс «Алгоритмы и структуры данных» 🔹 Получить консультацию менеджера 🔹 Сайт Академии () 🔹Сайт Proglib Библиотека C/C++ разработчика #линкер_рекомендует
Show all...
😁 3
Photo unavailableShow in Telegram
😎 Где сидят крутые плюсовики Мы знаем, что вокруг C++ огромное количество полезного контента — от классических блогов и телеграм-каналов до Stack Overflow, Reddit-сообществ и YouTube-каналов. А может вы сами создаете контент про плюсы? 💬 Делитесь в комментариях своими любимыми местами, где вы изучаете C++, следите за новостями стандарта или черпаете вдохновение. Это могут быть известные ресурсы вроде isocpp.org, малоизвестные телеграм-каналы, подкасты, конференции или личные блоги разработчиков. Библиотека C/C++ разработчика
Show all...
🤔 3👾 2😁 1
Photo unavailableShow in Telegram
🎄 Скоро Новый год, а ты всё ещё не в бигтехе? Если твой путь лежит в ML, DS или AI, то одна вещь решает всё: математика. Без неё — хоть три проекта сделай, хоть сотню туториалов посмотри — на собесе тебя всё равно вернут на «а что такое градиент?» 🔥 Экспресс-курс «Математика для Data Science» — 8 недель, чтобы закрыть базу раз и навсегда. Что внутри: 🔘 живые вебинары, где можно задавать вопросы экспертам 🔘 записи лекций + доступ к материалам 🔘 практические задания на Python и финальный мини-проект с фидбеком 🔘 программа обновлена в ноябре 2025 🔘 2 месяца только нужного — без воды 🔘 достаточно школьной математики и базового Python 🎁 Бонусы ноября: → 40% скидка до 30 ноября → при оплате до конца месяца — курс «Базовая математика» в подарок → бесплатный тест, чтобы узнать свой уровень математики 👉 Хочу стартовать
Show all...
😁 1
🍪 Как zip итерирует несколько ranges одновременно без накладных расходов? Параллельная итерация по нескольким последовательностям — паттерн из Python. В C++ до C++23 это требовало индексов или связывания итераторов руками. views::zip делает это zero-cost абстракцией. ✅ Tuple итераторов Под капотом zip хранит tuple из итераторов каждого range. При ++it инкрементирует все одновременно:
std::vector<int> ids = {1, 2, 3};
std::vector<string> names = {"Alice", "Bob", "Charlie"};

for (auto [id, name] : views::zip(ids, names)) {
    // id и name — это references, не копии
    std::print("{}: {}\n", id, name);
}
💡 Structured binding магия auto [id, name] — это structured binding поверх tuple<int&, string&>. Компилятор разворачивает это в прямой доступ к памяти, никаких промежуточных объектов:
// Что реально происходит
auto&& __pair = *it;  // tuple<int&, string&>
int& id = get<0>(__pair);
string& name = get<1>(__pair);
🍬 Остановка на кратчайшем zip заканчивается когда любой из ranges закончился. Это безопасно — не будет out-of-bounds:
vector<int> short_vec = {1, 2};
vector<int> long_vec = {10, 20, 30, 40};
auto z = views::zip(short_vec, long_vec);  // Только 2 элемента
Практика: Используй вместо индексного доступа [i] когда нужно синхронно пройти несколько контейнеров. Компилятор оптимизирует до прямых указателей, часто быстрее индексов. 🔹 Курс «Алгоритмы и структуры данных» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib Библиотека C/C++ разработчика #под_капотом
Show all...
👍 10 1
Photo unavailableShow in Telegram
🗄️ Как защитить себя от увольнения: карьерная «страховка» для IT‑шника Рассказываем о способах, которые помогут подстраховать себя на работе в период кризиса в IT-индустрии. Объясняем, как заключить трудовой договор (и что точно должно быть в нем прописано) и соглашения о расторжении. 👉 Статья Библиотека C/C++ разработчика #шаблонный_код
Show all...
😁 4 1
🍴 Типичные ошибки со structured bindings Structured bindings выглядят просто, но есть подводные камни, которые ловят даже опытные разработчики. 1️⃣ Забыли & и получили копию
struct Heavy {
    std::vector<int> data{1'000'000};
};

std::pair<int, Heavy> getPair();

// ❌ Копирование элементов!
auto [id, heavy] = getPair();

// ✅ Работа через ссылку
auto& [id, heavy] = getPair();
2️⃣ Неправильное количество переменных
std::tuple<int, int, int> getCoords();

// ❌ Ошибка компиляции
auto [x, y] = getCoords();  // Нужно ровно 3 переменные!

// ✅ Правильно
auto [x, y, z] = getCoords();
3️⃣ Dangling references
// ❌ ОПАСНО!
const auto& [x, y] = std::make_pair(1, 2);
// Временный объект уничтожен, x и y невалидны

// ✅ БЕЗОПАСНО
auto [x, y] = std::make_pair(1, 2);
4️⃣ Попытка модифицировать const
const auto [x, y] = getPair();
x = 10;  // ❌ Ошибка: x — константа!

// Нужно:
auto [x, y] = getPair();  // Без const
5️⃣ Неправильные ожидания от типов
std::map<int, std::string> m{{1, "one"}};

// key имеет тип const int&, не int&!
for (auto& [key, value] : m) {
    key = 2;  // ❌ Ошибка компиляции!
}
✏️ Какие ошибки совершали вы? Поделитесь в комментариях! Библиотека C/C++ разработчика #константная_правильность
Show all...
9👍 4😁 2👏 1🥱 1
🍴 Макросы vs Inline: битва прошлого века В legacy коде до сих пор встречаются макросы вместо inline функций. И это проблема. Макросы — это текстовая подстановка препроцессором до компиляции. Классический пример:
cpp #define SQUARE(x) x*x
Выглядит невинно, но вызов SQUARE(a+b) развернется в a+b*a+b вместо (a+b)*(a+b). Проблемы с приоритетом операций, отсутствие type safety, невозможность отладки — список можно продолжать. Inline функции решают все эти проблемы. Они проверяются компилятором на типы, поддерживают перегрузку, могут использовать пространства имен и классы. Отладчик понимает их как обычные функции. А современные компиляторы оптимизируют их так же эффективно, как макросы, но безопаснее. Единственное преимущество макросов — работа с любыми типами без шаблонов. Но с появлением constexpr и шаблонов в C++11/14/17 даже это преимущество исчезло. Вы всё ещё пишете макросы для "быстрых" функций или давно перешли на inline/constexpr? Библиотека C/C++ разработчика #междусобойчик
Show all...
👍 6🤔 4
🔥 Inline static в классах — забудь про .cpp
Сколько раз ты забывал добавить определение static члена в .cpp, и компилятор радостно выдавал undefined reference?
С C++17 можно просто добавить inline к static переменной класса, и всё работает. Особенно круто это для счётчиков, кешей и паттерна Registry.
// До C++17
class Logger {
public:
    static std::ofstream log_file; // объявление
    static int message_count;       // объявление
};
// В .cpp обязательно нужны определения:
// std::ofstream Logger::log_file{"app.log"};
// int Logger::message_count = 0;

// С C++17
class Logger {
public:
    inline static std::ofstream log_file{"app.log"};
    inline static int message_count = 0;
    inline static std::mutex log_mutex;
    
    static void log(const std::string& msg) {
        std::lock_guard lock(log_mutex);
        log_file << "[" << message_count++ << "] " << msg << '\n';
    }
};
// Никаких дополнительных файлов!
❗️Теперь весь класс может жить в заголовочном файле, что идеально для template классов и header-only библиотек. Инициализация происходит при первом использовании, потокобезопасно и предсказуемо. 🐸 Рефактори свои старые классы — убери лишние .cpp файлы и наслаждайся чистым кодом. Библиотека C/C++ разработчика #шаблонный_код
Show all...
👍 18 1