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

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

Відкрити в Telegram

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

Показати більше
2025 рік у цифрахsnowflakes fon
card fon
19 541
Підписники
-824 години
-447 днів
-17630 день
Архів дописів
🍪 Как 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++ разработчика #под_капотом
Показати все...
👍 10 1
Фото недоступнеДивитись в Telegram
🗄️ Как защитить себя от увольнения: карьерная «страховка» для IT‑шника Рассказываем о способах, которые помогут подстраховать себя на работе в период кризиса в IT-индустрии. Объясняем, как заключить трудовой договор (и что точно должно быть в нем прописано) и соглашения о расторжении. 👉 Статья Библиотека C/C++ разработчика #шаблонный_код
Показати все...
😁 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++ разработчика #константная_правильность
Показати все...
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++ разработчика #междусобойчик
Показати все...
👍 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++ разработчика #шаблонный_код
Показати все...
👍 18 1
Фото недоступнеДивитись в Telegram
📊 А правда, что математика в Data Science не нужна? Нет. Без неё вы не пройдёте собес и не поймёте, почему модель ведёт себя странно. Линал, матан и вероятности — это база, без которой работа в ML превращается в угадайку. 🔥 Эту базу можно собрать за 2 месяца на экспресс-курсе «Математика для Data Science». 👩‍🏫 Кто ведёт курс:Мария Тихонова PhD, руководитель исследовательского направления в SberAI, доцент ВШЭ. → Диана Миронидис Преподаватель ВШЭ, автор научпоп-материалов по математике для блога МТС. → Ксения Кондаурова Преподаватель преподаватель T-Банка, автор курсов ЦУ и Edutoria. → Маргарита Бурова Академический руководитель программ по аналитике и ML, Wildberries & Russ. 🎁 Что сейчас доступно: → бесплатный тест, чтобы узнать свой уровень математики; → скидка 40% до 30 ноября; → если оплатить до конца ноября, курс «Базовая математика» в подарок. 👉 Пишите менеджеру, если хотите попасть в поток
Показати все...
2😁 2
Repost from TgId: 1770516712
Что произошло с триграфами в C++17?Anonymous voting
  • Были добавлены новые триграфы для Unicode
  • Были полностью удалены из языка
  • Стали обязательными для всех компиляторов
  • Были заменены диграфами
  • Остались без изменений
0 votes
🌚 2😁 1
Repost from TgId: 1940255915
Сколько раз гарантированно прочитается x?Anonymous voting
  • 0 раз (оптимизировано)
  • 1 раз
  • 2 раза
  • Неопределённое поведение
  • Зависит от компилятора
0 votes
😁 3
Repost from TgId: 1940255915
Фото недоступнеДивитись в Telegram
Фото недоступнеДивитись в Telegram
🤝 Перестаньте ждать, пока вас найдут: как самому выходить на фаундеров и получать офферы Рекрутеры тянут неделями, ATS теряет резюме, а фидбека вообще можно не дождаться. Совсем другая история — написать напрямую CTO или тимлиду: ответ приходит за день-два, а созвон назначают сразу. Учимся находить технических лидеров стартапов и продуктовых компаний и писать так, чтобы точно получить ответ. 👉 Статья Библиотека C/C++ разработчика #буст
Показати все...
🔥 3😁 1🤔 1
Фото недоступнеДивитись в Telegram
Показати все...
😁 18 3🥱 1
Фото недоступнеДивитись в Telegram
📰 Свеженькое из мира C++ Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++. 😎 Полезное:Callback chain (цепочка обработчиков) — реализация Chain of Responsibility через лямбды • Лямбды в STL: где они сияют — применение лямбд в STL • std::flat_map в C++23 — адаптеры std::flat_map и std::flat_setЧто происходит при копировании std::array? — разбор того, что происходит при копировании std::array 🔥 Интересные проекты:XTML: минималистичный C++‑движок для HTML‑шаблонов — утилита написанная на C++, предназначенная для обработки шаблонных файлов и генерации динамического HTML • include-what-you-use — очистка include директив — инструмент от Google, который анализирует какие заголовочные файлы реально используются и предлагает минимальный набор includes Библиотека C/C++ разработчика #свежак
Показати все...
👍 4 1
Repost from TgId: 1770516712
Что происходит, когда профилирование показывает, что ветка с [[unlikely]] выполняется в 90% случаев?Anonymous voting
  • Компилятор автоматически исправляет атрибут
  • Runtime ошибка из-за несоответствия
  • Производительность ухудшается из-за неверного hint
  • Атрибут игнорируется
  • Программа крашится
0 votes
😁 2
Фото недоступнеДивитись в Telegram
🎉 Большая распродажа Proglib Academy — минус 40% на всё! 📚 Выбирай свой курс: ▫️ «Экспресс-курс по математике для DS» — получи фундамент для построения успешной карьеры в Data Science ▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными; ▫️ «Основы Python» — чтобы начать писать код с нуля; ▫️ «Алгоритмы и структуры данных» — для будущих инженеров; ▫️ «Специалист по ИИ» или «AI-агенты», или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ. ▫️ «Архитектуры и шаблоны проектирования» — чтобы писать гибкий, масштабируемый код как мидл+ разработчик. ▫️ «Основы IT для непрограммистов» — для тех, кто хочет понимать, как устроены технологии, не будучи разработчиком. 🎁 Бонусы ноября: ▫️ Розыгрыш MacBook Pro 14 — купи любой курс и пройди 2 недели обучения до 30 ноября. ▫️ Бесплатный тест по математике — за 5 минут покажет, какие темы стоит подтянуть перед DS. 👉 Выбрать курс со скидкой
Показати все...
😁 1
🍒 std::generator — ленивые последовательности в стандарте
Писал итераторы с кучей boilerplate для ленивого чтения? Или тащил ranges::views для простых генераторов?
C++23 добавляет std::generator — coroutine-based ленивые последовательности. Пишешь как обычную функцию, получаешь итератор. Идеально для парсеров, ленивого чтения файлов, бесконечных последовательностей.
#include <generator>
#include <print>
#include <fstream>
#include <string>
#include <optional>

// Простой генератор чисел Фибоначчи
std::generator<uint64_t> fibonacci(size_t count) {
    uint64_t a = 0, b = 1;
    
    for (size_t i = 0; i < count; ++i) {
        co_yield a;
        auto next = a + b;
        a = b;
        b = next;
    }
}

// Ленивое чтение строк из файла
std::generator<std::string> read_lines(const std::string& filename) {
    std::ifstream file(filename);
    std::string line;
    
    while (std::getline(file, line)) {
        co_yield line;
    }
}

// Генератор простых чисел (бесконечный)
std::generator<uint64_t> primes() {
    co_yield 2;
    
    std::vector<uint64_t> found_primes;
    uint64_t candidate = 3;
    
    while (true) {
        bool is_prime = true;
        for (auto p : found_primes) {
            if (p * p > candidate) break;
            if (candidate % p == 0) {
                is_prime = false;
                break;
            }
        }
        
        if (is_prime) {
            found_primes.push_back(candidate);
            co_yield candidate;
        }
        
        candidate += 2;
    }
}

// Генератор с трансформацией
std::generator<int> squares(int n) {
    for (int i = 0; i < n; ++i) {
        co_yield i * i;
    }
}

void demo() {
    // Первые 10 чисел Фибоначчи
    std::print("Fibonacci: ");
    for (auto num : fibonacci(10)) {
        std::print("{} ", num);
    }
    std::println("");
    
    // Первые 20 простых
    std::print("Primes: ");
    size_t count = 0;
    for (auto prime : primes()) {
        std::print("{} ", prime);
        if (++count >= 20) break;
    }
    std::println("");
    
    // Квадраты
    std::print("Squares: ");
    for (auto sq : squares(5)) {
        std::print("{} ", sq);
    }
    std::println("");
}
❗️ Используй generator вместо ручного написания итераторов для ленивых последовательностей. Память выделяется только под state coroutine. Можно делать бесконечные последовательности без риска. Библиотека C/C++ разработчика #под_капотом
Показати все...
🔥 8👍 2
🐸 Подборка вакансий для C++-разработчиков за неделю Разработчик C++ — от 230 000 и до 250 000 ₽ Удалёнка Middle C++ Developer (Core) — от 200 000 ₽ Удалёнка Lead C++ Software Engineer (Gameplay) — Удалёнка С++ Tools Developer — Гибрид (Москва) Team Lead C++ — до 400 000 ₽ Удалёнка, гибрид (Москва) Разработчик С++/ QML — Офис (Москва) Библиотека C/C++ разработчика
Показати все...
👍 2
Фото недоступнеДивитись в Telegram
Показати все...
😁 10 2💯 2
🤖 AI сейчас на пике — и математика снова в центре внимания.
«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»
Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас. Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI. 🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы. 🎁 До 30 ноября: → скидка 40% → курс «Школьная математика» в подарок при оплате → бесплатный тест на знание основ математики 👉 Записаться на курс
Показати все...
🥱 6👍 1😁 1
00:42
Відео недоступнеДивитись в Telegram
6.65 MB
🥱 4
Repost from TgId: 1770516712
Какое главное преимущество spanstream перед stringstream?Anonymous voting
  • Автоматическое управление памятью
  • Более быстрая работа со строками
  • Работа с существующим буфером без аллокаций
  • Поддержка Unicode
  • Thread-safety
0 votes