Вышмат для тех, кто интересуется DS, ML, AI
👉 Подробности – https://proglib.io/w/6426c2a6
Как говорят наши студенты «Я понимаю, куда движется сфера IT, уже в каждой компании есть отдел, который отвечает за ИИ, эта сфера точно останется востребованной ближайшие 10-15 лет, поэтому сейчасл лучшее время начать учиться»
💰Стоимость?
– Доступна беспроцентная рассрочка от 2 499 рублей в месяц. Или сразу 29 990 рублей.
Как проходит обучение?
– Записанные лекции от преподавателей МГУ
– Домашние задания и развернутая обратная связь
– Чат с куратором и студентами
Когда можно приступать?
– В любой момент
Оставить заявку на пробную версию курса «Математика для Data Science» – https://proglib.io/w/6426c2a6
👉 Подробности – 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++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)
🤖 Внутри 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, это элегантное и эффективное решение продемонстрировано выше.
#код
С 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.
#код
Это технология, позволяющая одновременно выполнять одну и ту же операцию над несколькими наборами данных. В современных процессорах 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 уничтожается, он автоматически удаляет объект.
Напишите базовую реализацию std::shared_ptr.
Герои Кода и Магии: анализ игрового движка VCMI
Порой хочется поностальгировать и поиграть в любимую старую игру, но некоторые вещи в таких играх могут показаться устаревшими. Для того чтобы вдохнуть новую жизнь в старый проект, некоторые энтузиасты ставят себе задачу воссоздать и улучшить его исходный код. Авторы статьи решили проверить с помощью статического анализатора PVS-Studio, насколько хорошо справляются с этой задачей разработчики VCMI.
Читать статью
Порой хочется поностальгировать и поиграть в любимую старую игру, но некоторые вещи в таких играх могут показаться устаревшими. Для того чтобы вдохнуть новую жизнь в старый проект, некоторые энтузиасты ставят себе задачу воссоздать и улучшить его исходный код. Авторы статьи решили проверить с помощью статического анализатора PVS-Studio, насколько хорошо справляются с этой задачей разработчики VCMI.
Читать статью
Бинарный поиск
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся.
В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).
Код выводит следующее:
бинарный поиск: нашли по индексу 4
Если искомый элемент не найден, но мы хотим найти ближайший элемент меньше или больше запроса, то можно использовать функции STL lower_bound() и upper_bound().
#код
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся.
В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).
Код выводит следующее:
бинарный поиск: нашли по индексу 4
Если искомый элемент не найден, но мы хотим найти ближайший элемент меньше или больше запроса, то можно использовать функции STL lower_bound() и upper_bound().
#код
C++23: alias объявления в операторах инициализации цикла for
Иногда принятые предложения вводят совершенно новые фичи, иногда они приносят исправления ошибок, а иногда находятся где-то посередине.
Читать статью
Иногда принятые предложения вводят совершенно новые фичи, иногда они приносят исправления ошибок, а иногда находятся где-то посередине.
Читать статью
Какой средой разработки пользуетесь?
#интерактив
#интерактив
Какие есть особенности статических полей класса в языке С++?
Статические поля класса в C++ имеют несколько особенностей:
1. Общий доступ: статические поля являются общими для всех объектов этого класса. Это означает, что изменение значения статического поля в одном объекте, изменяет его для всех объектов этого класса.
2. Инициализация: статические поля инициализируются только один раз, когда программа запускается. Значения статических полей сохраняются на протяжении всего времени работы программы.
3. Доступ: доступ к статическим полям класса возможен без создания объекта этого класса, например, используя имя класса и оператор :: .
4. Память: статические поля класса хранятся не в куче или стеке, а в статической области памяти, что позволяет им занимать память только один раз, независимо от количества созданных объектов класса.
#вопросы_с_собеседований
Статические поля класса в C++ имеют несколько особенностей:
1. Общий доступ: статические поля являются общими для всех объектов этого класса. Это означает, что изменение значения статического поля в одном объекте, изменяет его для всех объектов этого класса.
2. Инициализация: статические поля инициализируются только один раз, когда программа запускается. Значения статических полей сохраняются на протяжении всего времени работы программы.
3. Доступ: доступ к статическим полям класса возможен без создания объекта этого класса, например, используя имя класса и оператор :: .
4. Память: статические поля класса хранятся не в куче или стеке, а в статической области памяти, что позволяет им занимать память только один раз, независимо от количества созданных объектов класса.
#вопросы_с_собеседований
⚙️ 3 совета по использованию Git для начинающих
Разберем полезные советы по работе с Git: просмотр журналов, сводки коммита и сравним команды merge и rebase.
Читать статью
Разберем полезные советы по работе с Git: просмотр журналов, сводки коммита и сравним команды merge и rebase.
Читать статью
std::thread
std::thread является частью стандартной библиотеки C++ и предоставляет возможность создания и управления потоками выполнения. Он позволяет запускать функции в отдельных потоках, обеспечивая параллельное выполнение кода.
Обратите внимание, что после создания потока std::thread, вы должны вызвать join() или detach() для корректной обработки завершения потока.
В приведенном примере мы использовали join(), чтобы основной поток дождался завершения потока t1. Если вы вызываете join() после завершения потока, программа может выдать исключение или вызвать неопределенное поведение.
#код
std::thread является частью стандартной библиотеки C++ и предоставляет возможность создания и управления потоками выполнения. Он позволяет запускать функции в отдельных потоках, обеспечивая параллельное выполнение кода.
Обратите внимание, что после создания потока std::thread, вы должны вызвать join() или detach() для корректной обработки завершения потока.
В приведенном примере мы использовали join(), чтобы основной поток дождался завершения потока t1. Если вы вызываете join() после завершения потока, программа может выдать исключение или вызвать неопределенное поведение.
#код
В работе используете linux, macOS или Windows? Расскажите в комментариях ⬇️
#интерактив
#интерактив
Поиск в ширину
Поиск в ширину (breadth-first search, BFS) — это алгоритм поиска или обхода графа. Он исследует все вершины на одном уровне, прежде чем переходить к следующему уровню.
Этот пример иллюстрирует обход в ширину для следующего графа:
0
/ \
1-----2
\
3
Начиная с вершины 2, алгоритм BFS посетит вершины в следующем порядке: 2, 0, 3, 1.
#код
Поиск в ширину (breadth-first search, BFS) — это алгоритм поиска или обхода графа. Он исследует все вершины на одном уровне, прежде чем переходить к следующему уровню.
Этот пример иллюстрирует обход в ширину для следующего графа:
0
/ \
1-----2
\
3
Начиная с вершины 2, алгоритм BFS посетит вершины в следующем порядке: 2, 0, 3, 1.
#код
Еще один #дайджест статей по С++:
🤖Исправление GCC для создания фактически переносимых исполняемых файлов
🤖 Предварительно скомпилированные заголовки
🤖 Давайте перечислим undefined behavior
🤖 Веселье с gRPC и C++
🤖 Бьерн Страуструп: Как развивать язык
🤖 Как клонировать вектор среды выполнения Windows перед лицом возможной одновременной модификации
🤖 Проверка перевода GCC, часть 4: расчеты адресов
🤖Исправление GCC для создания фактически переносимых исполняемых файлов
🤖 Предварительно скомпилированные заголовки
🤖 Давайте перечислим undefined behavior
🤖 Веселье с gRPC и C++
🤖 Бьерн Страуструп: Как развивать язык
🤖 Как клонировать вектор среды выполнения Windows перед лицом возможной одновременной модификации
🤖 Проверка перевода GCC, часть 4: расчеты адресов
Рассказываем про мир job-сайтов: где программисту опубликовать резюме, чтобы быстрее найти работу в IT.
🔗 Основной сайт
🔗 Зеркало
🔗 Основной сайт
🔗 Зеркало
Узнаем длину аудио файла
В этом примере мы открываем файл с помощью std::ifstream, находим его размер, а затем вычисляем длительность аудио файла, зная частоту дискретизации (в данном случае 44100 Гц). Выводим длительность в минутах и секундах.
Убедитесь, что заменили "your_audio_file.wav" на путь к вашему аудио файлу, а также, если частота дискретизации вашего аудио файла отличается от 44100 Гц, замените это значение на соответствующее значение вашего аудио файла.
#код
В этом примере мы открываем файл с помощью std::ifstream, находим его размер, а затем вычисляем длительность аудио файла, зная частоту дискретизации (в данном случае 44100 Гц). Выводим длительность в минутах и секундах.
Убедитесь, что заменили "your_audio_file.wav" на путь к вашему аудио файлу, а также, если частота дискретизации вашего аудио файла отличается от 44100 Гц, замените это значение на соответствующее значение вашего аудио файла.
#код