Библиотека C/C++ разработчика | cpp, boost, qt
Відкрити в Telegram
Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Показати більше2025 рік у цифрах

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
- Были полностью удалены из языка
- Стали обязательными для всех компиляторов
- Были заменены диграфами
- Остались без изменений
🌚 2😁 1
Repost from TgId: 1940255915
Сколько раз гарантированно прочитается x?Anonymous voting
- 0 раз (оптимизировано)
- 1 раз
- 2 раза
- Неопределённое поведение
- Зависит от компилятора
😁 3
Repost from TgId: 1940255915
Фото недоступнеДивитись в Telegram
Фото недоступнеДивитись в Telegram
🤝 Перестаньте ждать, пока вас найдут: как самому выходить на фаундеров и получать офферы
Рекрутеры тянут неделями, ATS теряет резюме, а фидбека вообще можно не
дождаться. Совсем другая история — написать напрямую CTO или тимлиду:
ответ приходит за день-два, а созвон назначают сразу. Учимся находить
технических лидеров стартапов и продуктовых компаний и писать так, чтобы
точно получить ответ.
👉 Статья
Библиотека C/C++ разработчика
#буст
🔥 3😁 1🤔 1
Фото недоступнеДивитись в Telegram
Библиотека C/C++ разработчика
#развлекалово
😁 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
- Атрибут игнорируется
- Программа крашится
😁 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
Библиотека C/C++ разработчика
#развлекалово
😁 10❤ 2💯 2
🤖 AI сейчас на пике — и математика снова в центре внимания.
«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас. Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI. 🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы. 🎁 До 30 ноября: → скидка 40% → курс «Школьная математика» в подарок при оплате → бесплатный тест на знание основ математики 👉 Записаться на курс
🥱 6👍 1😁 1
Repost from TgId: 1770516712
Какое главное преимущество spanstream перед stringstream?Anonymous voting
- Автоматическое управление памятью
- Более быстрая работа со строками
- Работа с существующим буфером без аллокаций
- Поддержка Unicode
- Thread-safety
