std::reference_wrapper
std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.
Основное назначение std::reference_wrapper заключается в том, чтобы позволить передавать ссылки как аргументы функций, которые обычно ожидают копии объектов. Это особенно полезно, например, при использовании алгоритмов из стандартной библиотеки, которые могут копировать элементы контейнера, если не явно указано иначе.
#код
std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.
Основное назначение std::reference_wrapper заключается в том, чтобы позволить передавать ссылки как аргументы функций, которые обычно ожидают копии объектов. Это особенно полезно, например, при использовании алгоритмов из стандартной библиотеки, которые могут копировать элементы контейнера, если не явно указано иначе.
#код
Очередной #дайджест по С++:
✍️ Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка
Статья о том, как реверс-инжиниринг и разбор форматов могут не только расширить старую любимую игрушку, но и сделать из неё абсолютный шедевр, который будет смотреться уже в новом свете.
✍️ Психический симулятор или Triumvirate of Hearts
Автор решил поделиться своей игрой и своими исследованиями в области психологии.
✍️ Как устроен PassMark. Воспроизводим тесты из машинного кода
Что находится под капотом у легендарной программы для бенчмаркинга? Автор предлагает изучить ее алгоритмы тестирования и воспроизвести их самостоятельно на других языках программирования, чтобы иметь независимую возможность получения оценки производительности.
✍️ Принцип проектирования API: чтение свойства или добавление обработчика событий не должно изменять наблюдаемое поведение
Статья из блога Майкрософт.
✍️ Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка
Статья о том, как реверс-инжиниринг и разбор форматов могут не только расширить старую любимую игрушку, но и сделать из неё абсолютный шедевр, который будет смотреться уже в новом свете.
✍️ Психический симулятор или Triumvirate of Hearts
Автор решил поделиться своей игрой и своими исследованиями в области психологии.
✍️ Как устроен PassMark. Воспроизводим тесты из машинного кода
Что находится под капотом у легендарной программы для бенчмаркинга? Автор предлагает изучить ее алгоритмы тестирования и воспроизвести их самостоятельно на других языках программирования, чтобы иметь независимую возможность получения оценки производительности.
✍️ Принцип проектирования API: чтение свойства или добавление обработчика событий не должно изменять наблюдаемое поведение
Статья из блога Майкрософт.
Что вы чаще всего гуглите по работе?
#интерактив
#интерактив
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
std::enable_if
std::enable_if — это шаблон, который позволяет условно включать функциональность в зависимости от удовлетворения какого-либо условия.
Шаблон определен в заголовочном файле и позволяет "включить" код, если некое условие истинно, и "выключить", если ложно.
Часто используется для метапрограммирования — принятия решений на этапе компиляции, а также для перегрузки шаблонных функций.
В примере enable_if включит реализацию is_even только для целочисленных T. Для не целых типов компиляция завершится с ошибкой.
Таким образом, enable_if позволяет гибко управлять логикой и функциональностью на этапе компиляции.
#код
std::enable_if — это шаблон, который позволяет условно включать функциональность в зависимости от удовлетворения какого-либо условия.
Шаблон определен в заголовочном файле и позволяет "включить" код, если некое условие истинно, и "выключить", если ложно.
Часто используется для метапрограммирования — принятия решений на этапе компиляции, а также для перегрузки шаблонных функций.
В примере enable_if включит реализацию is_even только для целочисленных T. Для не целых типов компиляция завершится с ошибкой.
Таким образом, enable_if позволяет гибко управлять логикой и функциональностью на этапе компиляции.
#код
Что такое TDD?
TDD (Test-Driven Development) — это подход к разработке программного обеспечения, при котором сначала пишутся автоматические тесты, определяющие желаемое поведение кода, а затем реализуется минимально необходимый код, чтобы пройти эти тесты.
Основные принципы TDD:
— Написание теста перед кодом: сначала пишется тест, определяющий желаемую функциональность. Затем пишется минимальный код, чтобы пройти этот тест.
— Рефакторинг: после прохождения теста код рефакторится для улучшения структуры и читаемости, при этом все тесты должны оставаться пройденными.
— Повторение: цикл повторяется — новый тест, код, рефакторинг.
— Тесты должны быть автоматизированными и запускаться очень часто.
Преимущества TDD: предотвращение дефектов, улучшение структуры кода, быстрая обратная связь.
TDD позволяет создавать код, удовлетворяющий требованиям и хорошо тестируемый.
#вопросы_с_собеседований
TDD (Test-Driven Development) — это подход к разработке программного обеспечения, при котором сначала пишутся автоматические тесты, определяющие желаемое поведение кода, а затем реализуется минимально необходимый код, чтобы пройти эти тесты.
Основные принципы TDD:
— Написание теста перед кодом: сначала пишется тест, определяющий желаемую функциональность. Затем пишется минимальный код, чтобы пройти этот тест.
— Рефакторинг: после прохождения теста код рефакторится для улучшения структуры и читаемости, при этом все тесты должны оставаться пройденными.
— Повторение: цикл повторяется — новый тест, код, рефакторинг.
— Тесты должны быть автоматизированными и запускаться очень часто.
Преимущества TDD: предотвращение дефектов, улучшение структуры кода, быстрая обратная связь.
TDD позволяет создавать код, удовлетворяющий требованиям и хорошо тестируемый.
#вопросы_с_собеседований
is_sorted_until
Этот алгоритм проверяет, отсортирован ли заданный диапазон данных.
Он возвращает итератор на первый элемент, нарушающий порядок сортировки.
Алгоритм принимает 3 параметра:
— Итератор на начало проверяемого диапазона.
— Итератор на конец диапазона.
— Компаратор для сравнения элементов (по умолчанию less).
Алгоритм идет по диапазону от начала к концу и сравнивает каждый элемент с предыдущим с помощью компаратора.
Если нарушения порядка не найдено, возвращается итератор на конец диапазона. Иначе возвращается итератор на первый нарушающий элемент.
Этот алгоритм удобен, чтобы проверить, в какой момент отсортированный диапазон теряет порядок.
#код
Этот алгоритм проверяет, отсортирован ли заданный диапазон данных.
Он возвращает итератор на первый элемент, нарушающий порядок сортировки.
Алгоритм принимает 3 параметра:
— Итератор на начало проверяемого диапазона.
— Итератор на конец диапазона.
— Компаратор для сравнения элементов (по умолчанию less).
Алгоритм идет по диапазону от начала к концу и сравнивает каждый элемент с предыдущим с помощью компаратора.
Если нарушения порядка не найдено, возвращается итератор на конец диапазона. Иначе возвращается итератор на первый нарушающий элемент.
Этот алгоритм удобен, чтобы проверить, в какой момент отсортированный диапазон теряет порядок.
#код
🦾 Основы использования C/C++
С++ способен решать огромное количество задач и вся мощь этого языка в том, что он делает это быстро. Автор видео рассказывает, как исправить выполнение ненужных команд в отдельном ожидающем потоке, как эффективно использовать указатели на функции, а также много других полезных деталей.
Смотреть видео
С++ способен решать огромное количество задач и вся мощь этого языка в том, что он делает это быстро. Автор видео рассказывает, как исправить выполнение ненужных команд в отдельном ожидающем потоке, как эффективно использовать указатели на функции, а также много других полезных деталей.
Смотреть видео
Монитор с какой диагональю чаще всего используете на работе?
#интерактив
#интерактив
Ответьте на 3 вопроса, чтобы получить демо-доступ к курсу «Алгоритмы и структуры данных»
⚡️Получить демо, ответив на 3 вопроса – https://proglib.io/w/979a2896
В бесплатной части вас ждут:
1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов
2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ
3. Практические задания после лекций
4. Ссылки на дополнительные материалы для самостоятельного изучения
Переходите и начинайте учиться уже сегодня!
⚡️Получить демо, ответив на 3 вопроса – https://proglib.io/w/979a2896
В бесплатной части вас ждут:
1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов
2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ
3. Практические задания после лекций
4. Ссылки на дополнительные материалы для самостоятельного изучения
Переходите и начинайте учиться уже сегодня!
std::apply
std::apply — это функция, которая принимает в качестве аргументов вызываемый объект и кортеж аргументов, а затем вызывает этот объект с элементами кортежа в качестве аргументов. Это позволяет удобно вызывать функции с аргументами, хранящимися в кортеже.
В этом примере мы создаем кортеж args, содержащий два аргумента для функции add. Затем мы используем std::apply для вызова функции add с этими аргументами. В конце мы выводим результат на экран.
#код
std::apply — это функция, которая принимает в качестве аргументов вызываемый объект и кортеж аргументов, а затем вызывает этот объект с элементами кортежа в качестве аргументов. Это позволяет удобно вызывать функции с аргументами, хранящимися в кортеже.
В этом примере мы создаем кортеж args, содержащий два аргумента для функции add. Затем мы используем std::apply для вызова функции add с этими аргументами. В конце мы выводим результат на экран.
#код
Очередной #дайджест по С++:
✍️ C++23: четыре новых ассоциативных контейнера
В C++23 появились четыре новых ассоциативных контейнера: std::flat_map, std::flat_multimap, std::flat_set и std::flat_multiset, которые являются полноценной заменой упорядоченных ассоциативных контейнеров std::map, std::multimap, std::set и std::multiset.
✍️ Детекция машин на мобилке в 2023. С какими проблемами мы столкнулись и как решали
Как распознавали машины с камеры мобильного телефона с помощью TensorFlow-lite, C++, Qt и что из этого вышло.
✍️ Как и зачем мы парсим XML
Этот язык разметки настолько глубоко вошел в нашу жизнь, что сложно представить систему, в которой не используется он сам или его подмножества.
✍️ Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK
GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов.
✍️ C++23: четыре новых ассоциативных контейнера
В C++23 появились четыре новых ассоциативных контейнера: std::flat_map, std::flat_multimap, std::flat_set и std::flat_multiset, которые являются полноценной заменой упорядоченных ассоциативных контейнеров std::map, std::multimap, std::set и std::multiset.
✍️ Детекция машин на мобилке в 2023. С какими проблемами мы столкнулись и как решали
Как распознавали машины с камеры мобильного телефона с помощью TensorFlow-lite, C++, Qt и что из этого вышло.
✍️ Как и зачем мы парсим XML
Этот язык разметки настолько глубоко вошел в нашу жизнь, что сложно представить систему, в которой не используется он сам или его подмножества.
✍️ Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK
GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов.
Функция resize
Функция resize служит для изменения размера контейнеров, например вектора или deque.
Она динамически меняет количество элементов в контейнере на указанное число.
Например, для вектора numbers вызов:
numbers.resize(100);
Установит размер вектора в 100 элементов.
Если изначально элементов было меньше — новые будут инициализированы по умолчанию (нулями). Если было больше — лишние удалятся.
Также можно явно задать значение для инициализации:
numbers.resize(80, -1);
Также resize принимает вектор-шаблон для копирования значений при расширении.
#код
Функция resize служит для изменения размера контейнеров, например вектора или deque.
Она динамически меняет количество элементов в контейнере на указанное число.
Например, для вектора numbers вызов:
numbers.resize(100);
Установит размер вектора в 100 элементов.
Если изначально элементов было меньше — новые будут инициализированы по умолчанию (нулями). Если было больше — лишние удалятся.
Также можно явно задать значение для инициализации:
numbers.resize(80, -1);
Также resize принимает вектор-шаблон для копирования значений при расширении.
#код
CppCast: физические единицы и система величин
Гость подкаста рассказывает о своей библиотеке физических единиц (и величин) mp-units, о том, почему v2 представляет собой полностью измененный дизайн по сравнению с предыдущей версией и о том, насколько важно включение системы величин в этот новый дизайн.
Открыть сайт
Гость подкаста рассказывает о своей библиотеке физических единиц (и величин) mp-units, о том, почему v2 представляет собой полностью измененный дизайн по сравнению с предыдущей версией и о том, насколько важно включение системы величин в этот новый дизайн.
Открыть сайт
Алгоритм lexicographic_compare
Алгоритм lexicographical_compare используется для лексикографического сравнения двух диапазонов элементов, таких как векторы или строки. Он находится в заголовочном файле .
Алгоритм принимает 2 диапазона элементов для сравнения, сравнивает элементы попарно, используя оператор < и возвращает true, если первый диапазон меньше второго, или false в противном случае.
Работает для любых типов данных, которые можно сравнивать с помощью <.
#код
Алгоритм lexicographical_compare используется для лексикографического сравнения двух диапазонов элементов, таких как векторы или строки. Он находится в заголовочном файле .
Алгоритм принимает 2 диапазона элементов для сравнения, сравнивает элементы попарно, используя оператор < и возвращает true, если первый диапазон меньше второго, или false в противном случае.
Работает для любых типов данных, которые можно сравнивать с помощью <.
#код
Что такое специализация шаблона?
Специализация шаблона — это возможность создать отдельную реализацию шаблонной функции или класса для конкретных типов параметров. Это позволяет оптимизировать шаблонные решения для частных случаев.
Например, можно создать специализацию std::vector для bool, которая будет хранить данные в битовых полях, а не как отдельные элементы.
При вызове шаблона компилятор будет искать специализацию для конкретных типов и использовать ее, если она есть. В противном случае используется обобщенная реализация.
#вопросы_с_собеседований
Специализация шаблона — это возможность создать отдельную реализацию шаблонной функции или класса для конкретных типов параметров. Это позволяет оптимизировать шаблонные решения для частных случаев.
Например, можно создать специализацию std::vector для bool, которая будет хранить данные в битовых полях, а не как отдельные элементы.
При вызове шаблона компилятор будет искать специализацию для конкретных типов и использовать ее, если она есть. В противном случае используется обобщенная реализация.
#вопросы_с_собеседований
std::pair
std::pair — это шаблон класса из стандартной библиотеки, который инкапсулирует пару значений разных типов.
Он часто используется для возврата нескольких значений из функции.
В этом примере getStats возвращает пару значений — сумму и среднее элементов массива. С помощью std::pair эти значения упаковываются в один возвращаемый объект. В main используется structured binding для распаковки пары в переменные sum и avg.
#код
std::pair — это шаблон класса из стандартной библиотеки, который инкапсулирует пару значений разных типов.
Он часто используется для возврата нескольких значений из функции.
В этом примере getStats возвращает пару значений — сумму и среднее элементов массива. С помощью std::pair эти значения упаковываются в один возвращаемый объект. В main используется structured binding для распаковки пары в переменные sum и avg.
#код
Не используйте атрибуты [[likely]] или [[unlikely]].
В C++20 появились атрибуты [[likely]] и [[unlikely]] как способ дать программисту подсказку по оптимизации своей реализации. Почему же это не стоит использовать?
Читать статью
В C++20 появились атрибуты [[likely]] и [[unlikely]] как способ дать программисту подсказку по оптимизации своей реализации. Почему же это не стоит использовать?
Читать статью
Очередной #дайджест по С++:
✍️ Backend Driven UI с точки зрения бэкенда: к чему готовиться, если вы решили на него перейти
Многим знаком подход Backend Driven UI. С его помощью можно создавать новые страницы, запускать А/B-тесты, легко менять флоу в любое время и сразу на всех платформах. И при этом не надо долго и мучительно перевыкатывать приложение.
✍️ C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#
Чисто техническая статья, рассматривается тема, которая заявлена в заголовке, плюс разные практические методы, которые в этом будут полезны.
✍️ import CMake; Эксперимент окончен!
Наконец эксперимент завершен, и в CMake 3.28 включена официальная поддержка именованных модулей C++20 без необходимости установки переменной CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API.
✍️ Как использовать std::span из C++20
В этой статье рассмотрен std::span, который является более универсальным, чем string_view, и может помочь в работе с произвольными смежными коллекциями.
✍️ Backend Driven UI с точки зрения бэкенда: к чему готовиться, если вы решили на него перейти
Многим знаком подход Backend Driven UI. С его помощью можно создавать новые страницы, запускать А/B-тесты, легко менять флоу в любое время и сразу на всех платформах. И при этом не надо долго и мучительно перевыкатывать приложение.
✍️ C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#
Чисто техническая статья, рассматривается тема, которая заявлена в заголовке, плюс разные практические методы, которые в этом будут полезны.
✍️ import CMake; Эксперимент окончен!
Наконец эксперимент завершен, и в CMake 3.28 включена официальная поддержка именованных модулей C++20 без необходимости установки переменной CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API.
✍️ Как использовать std::span из C++20
В этой статье рассмотрен std::span, который является более универсальным, чем string_view, и может помочь в работе с произвольными смежными коллекциями.
Как часто вы ездите в офис? Сколько раз в неделю?
#интерактив
#интерактив