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

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

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

Наши каналы: https://yangx.top/proglibrary/9197

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
加入频道
🔥 Теоретический минимум по Computer Science

Computer Science рассказывает о том, как работает компьютер, что такое двоичная система, что за структуры данных и как их использовать.

Это видео — база по Computer Science, которую должен знать каждый программист. Здесь про блок схемы, вентили и работу двоичных систем.

Смотреть видео
Узнаем сколько лет человеку по дате его рождения

В этом коде мы запрашиваем у пользователя его дату рождения, а затем получаем текущую дату с помощью функции time. Затем мы используем структуру tm для извлечения года, месяца и дня из текущей даты и вычисляем количество полных лет с помощью формулы now->tm_year + 1900 - year. Если текущий месяц и день меньше, чем месяц и день рождения, мы уменьшаем возраст на 1. Наконец, мы выводим результат на экран.
#код
Пользуетесь ли вы какими-либо иностранными новостными ресурсами по программированию на регулярной основе? Если да, то какими?
#интерактив
Важно: правила площадки❗️

1️⃣ За спам, рекламу, ботоводство, скам — бан и удаление всех комментариев

2️⃣ За оскорбления группы/канала/админа/других участников, политические дебаты — первый раз удаление, второй раз — профилактический бан на неделю, третий раз — бан

3️⃣ За ссылки на нелегальные ресурсы — первый раз удаление, второй раз — бан

Напоминаем, что написать нам можно сюда: @proglibrary_feedback_bot

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

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

Читать статью
#вопросы_с_собеседований
Что такое Undefined behavior?

Undefined behavior — это непредсказуемое поведение программы, которое происходит, когда в коде содержится операция, которая не определена стандартом языка.

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

Ошибки в таком коде могут проявляться разнообразными способами, включая прекращение работы программы, непредсказуемые выходные данные, повреждение памяти или даже повреждение операционной системы. Избегайте Undefined behavior в своем коде, чтобы обеспечить надежность и безопасность системы.
Что такое rvalue, lvalue?

lvalue — это всё, что имеет имя, rvalue — это то, что имени не имеет. Исторически сложились такие названия, потому что lvalue всегда было то, что писалось с левой стороны присваивающего выражения, а rvalue — это то, что появлялось только справа от этого выражения.
#код
Пишем простые крестики-нолики на C++

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

Смотреть статью
Расскажите, какие YouTube-каналы смотрите по тематике программирования?
#интерактив
Вышмат для тех, кто интересуется DS, ML, AI

👉 Подробности – https://proglib.io/w/6426c2a6

Как говорят наши студенты «Я понимаю, куда движется сфера IT, уже в каждой компании есть отдел, который отвечает за ИИ, эта сфера точно останется востребованной ближайшие 10-15 лет, поэтому сейчасл лучшее время начать учиться»‎

💰Стоимость?

– Доступна беспроцентная рассрочка от 2 499 рублей в месяц. Или сразу 29 990 рублей.

Как проходит обучение?

– Записанные лекции от преподавателей МГУ
– Домашние задания и развернутая обратная связь
– Чат с куратором и студентами

Когда можно приступать?

– В любой момент

Оставить заявку на пробную версию курса «Математика для Data Science» – https://proglib.io/w/6426c2a6
std::variant

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

Шаблонный класс std::variant похож на упрощенную версию union, но с дополнительной безопасностью типов и поддержкой различных операций.

Основными функциями std::variant являются index(), valueless_by_exception(), operator=, emplace.

В этом примере мы создаем объект var, который может содержать значения типов int, float или std::string. Мы присваиваем var различные значения и получаем их с помощью std::get.

Однако, если мы попытаемся получить значение, используя неправильный тип (например, std::get(var), когда вариант содержит std::string, это вызовет исключение std::bad_variant_access.
#код
Очередной #дайджест по C/C++:
🤖 Внутри boost::concurrent_flat_map
🤖 C++23: следующий стандарт C++
🤖 Конечный автомат с std::variant
🤖 Отчет о поездке: C++ on Sea 2023
🤖 Ограничьте пользовательские конверсии

И пара полезных инструментов:
QGIS — это бесплатная кросс-платформенная (lin/win/mac) географическая информационная система с открытым исходным кодом.
shotcut — кроссплатформенный (Qt), видеоредактор с открытым исходным кодом (GPLv3)
OpenCat — платформа с открытым исходным кодом для разработки четвероногих роботов в стиле Boston Dynamics, которая идеально подходит для STEM, программирования робототехники, приложений для робототехники IoT, сервисов приложений для робототехники с улучшенным ИИ и исследований.

Открыть библиотеку
Использование выражений сгиба

С C++17 мы можем использовать складывать выражения для объединения последовательности std::arrays, это элегантное и эффективное решение продемонстрировано выше.
#код
SIMD (Single Instruction Multiple Data)

Это технология, позволяющая одновременно выполнять одну и ту же операцию над несколькими наборами данных. В современных процессорах SIMD-инструкции реализованы для ускорения работы с векторными операциями. В C++ SIMD-инструкции доступны через библиотеку immintrin.h.

В данном примере функция addVectors принимает на вход указатели на три массива a, b и c, каждый из которых содержит 8 элементов типа float. С помощью функции _mm256_loadu_ps происходит загрузка первого и второго векторов в регистры, затем с помощью функции _mm256_add_ps происходит их покомпонентное сложение. Результат сохраняется в третий вектор с помощью функции _mm256_storeu_ps.
#код
#вопросы_с_собеседований
Напишите базовую реализацию std::shared_ptr.

std::shared_ptr — умный указатель, который позволяет разделять владение объектом между несколькими shared_ptr. Когда последний shared_ptr уничтожается, он автоматически удаляет объект.
Герои Кода и Магии: анализ игрового движка VCMI

Порой хочется поностальгировать и поиграть в любимую старую игру, но некоторые вещи в таких играх могут показаться устаревшими. Для того чтобы вдохнуть новую жизнь в старый проект, некоторые энтузиасты ставят себе задачу воссоздать и улучшить его исходный код. Авторы статьи решили проверить с помощью статического анализатора PVS-Studio, насколько хорошо справляются с этой задачей разработчики VCMI.

Читать статью
Бинарный поиск

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

В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).

Код выводит следующее:

бинарный поиск: нашли по индексу 4

Если искомый элемент не найден, но мы хотим найти ближайший элемент меньше или больше запроса, то можно использовать функции STL lower_bound() и upper_bound().
#код
C++23: alias объявления в операторах инициализации цикла for

Иногда принятые предложения вводят совершенно новые фичи, иногда они приносят исправления ошибок, а иногда находятся где-то посередине.

Читать статью