Функция std::find_end
Функция
Синтаксис:
#для_продвинутых
Функция
std::find_end
в С++ используется для поиска последнего вхождения подпоследовательности элементов в заданном диапазоне. Она работает с итераторами, что делает её универсальной для различных контейнеров, таких как массивы, векторы, списки и т.д.Синтаксис:
template < class ForwardIterator1, class ForwardIterator2 >
ForwardIterator1 find_end ( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2 );
#для_продвинутых
Функция std::atomic_store
Функция
В примере на картинке функция
#для_продвинутых
Функция
std::atomic_store
используется для атомарного изменения значения атомарной переменной. Это означает, что изменение значения происходит мгновенно и не может быть прервано другими потоками.В примере на картинке функция
atomic_store
используется для атомарного увеличения значения счетчика counter на 1
. Функция atomic_load
используется для получения нового значения счетчика.#для_продвинутых
#вопросы_с_собеседований
Как можно использовать лямбда-выражения в C++ для создания анонимных блоков кода, которые могут изменять переменные захваченного контекста без изменения сигнатуры лямбды?
В C++ можно использовать лямбда-выражения с захватом по ссылке, чтобы анонимный блок кода мог изменять переменные из внешнего контекста. Захват по ссылке указывается с помощью символа & в списке захвата лямбды. Это позволяет лямбде изменять значения переменных, не меняя при этом сигнатуру лямбды.
В этом примере лямбда modifyX захватывает переменную x по ссылке и изменяет её значение. Такой подход позволяет лямбдам влиять на состояние переменных в области видимости, где они были определены, без необходимости изменять сигнатуру лямбды.
Как можно использовать лямбда-выражения в C++ для создания анонимных блоков кода, которые могут изменять переменные захваченного контекста без изменения сигнатуры лямбды?
В C++ можно использовать лямбда-выражения с захватом по ссылке, чтобы анонимный блок кода мог изменять переменные из внешнего контекста. Захват по ссылке указывается с помощью символа & в списке захвата лямбды. Это позволяет лямбде изменять значения переменных, не меняя при этом сигнатуру лямбды.
В этом примере лямбда modifyX захватывает переменную x по ссылке и изменяет её значение. Такой подход позволяет лямбдам влиять на состояние переменных в области видимости, где они были определены, без необходимости изменять сигнатуру лямбды.
Функция std::stold
Функция
Возвращаемое значение:
Возвращает значение типа
#для_начинающих
Функция
std::stold
из стандартной библиотеки C++ преобразует строку, представляющую десятичное число с плавающей запятой, в тип long double
.Возвращаемое значение:
Возвращает значение типа
long double
, полученное из преобразованной строки.#для_начинающих
This media is not supported in your browser
VIEW IN TELEGRAM
⚠️ WMI — это не только удобный инструмент администратора, но и один из самых скрытных векторов атак в Windows.
🔎 На открытом вебинаре вы узнаете, как работают такие атаки и как вовремя их выявлять.
Разберем:
- Что такое WMI и как он применяется в администрировании.
- Почему WMI так любят злоумышленники.
- Какие методы мониторинга помогают обнаружить скрытные атаки.
📅 Урок пройдёт 6 октября в 20:00 МСК в преддверии старта курса «Reverse Engineering». Присоединяюсь и получите скидку на обучение: https://otus.pw/crgG/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔎 На открытом вебинаре вы узнаете, как работают такие атаки и как вовремя их выявлять.
Разберем:
- Что такое WMI и как он применяется в администрировании.
- Почему WMI так любят злоумышленники.
- Какие методы мониторинга помогают обнаружить скрытные атаки.
📅 Урок пройдёт 6 октября в 20:00 МСК в преддверии старта курса «Reverse Engineering». Присоединяюсь и получите скидку на обучение: https://otus.pw/crgG/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Пример UB (Undefined behavior)
Ярким примером UB и ошибочного кода является повторное использование (в том числе повторное изменение) изменяемой переменной при вычислении выражения, когда относительный порядок вычисления термов не определен (то же касается фактических параметров функции в точке вызова).
Ярким примером UB и ошибочного кода является повторное использование (в том числе повторное изменение) изменяемой переменной при вычислении выражения, когда относительный порядок вычисления термов не определен (то же касается фактических параметров функции в точке вызова).
Приглашаем на бесплатный открытый урок «Пишем приложение органайзер на Qt»
🗓 6 октября, в 20:00 мск.
🆓 Бесплатно. Урок в рамках старта курса «Разработка прикладного ПО на Qt и ОС «Аврора»».
Регистрация: https://otus.pw/hSko/
🔗 Ссылка на регистрацию: https://otus.pw/hSko/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
#вопросы_с_собеседований
Что будет выведено и почему?
Ответ:
4294967271, предполагая 32-битные целые числа.
Почему так происходит?
Существует иерархия: long double, double, float, unsigned long int, long int, unsigned int, int. И когда два операнда определены как 25u (unsigned int) и 50 (int), 50 также будет интерпретироваться как беззнаковое целое число, то есть 50u.
Кроме того, результат операции также будет иметь тип операндов. Следовательно, результат 25u - 50u и сам является беззнаковым целым числом. Таким образом, результат -25 преобразуется в 4294967271.
Что будет выведено и почему?
Ответ:
Почему так происходит?
Существует иерархия: long double, double, float, unsigned long int, long int, unsigned int, int. И когда два операнда определены как 25u (unsigned int) и 50 (int), 50 также будет интерпретироваться как беззнаковое целое число, то есть 50u.
Кроме того, результат операции также будет иметь тип операндов. Следовательно, результат 25u - 50u и сам является беззнаковым целым числом. Таким образом, результат -25 преобразуется в 4294967271.
This media is not supported in your browser
VIEW IN TELEGRAM
Ускоряем рабочие процессы: оплачивайте Cursor через МТС Оплату ✨
Покупайте подписки для работы в пару кликов через СБП и с минимальной комиссией. Так же можно оплачивать ещё 150+ зарубежных сервисов: Replit, Sentry, Qodo, Warp, Windsurf и другие.
Весь процесс займёт не больше 5 минут. Пароли и лишние данные не нужны — только ваша почта. Оплачивайте сервисы и исправляйте баги вместе с МТС Оплатой 🤗
Покупайте подписки для работы в пару кликов через СБП и с минимальной комиссией. Так же можно оплачивать ещё 150+ зарубежных сервисов: Replit, Sentry, Qodo, Warp, Windsurf и другие.
Весь процесс займёт не больше 5 минут. Пароли и лишние данные не нужны — только ваша почта. Оплачивайте сервисы и исправляйте баги вместе с МТС Оплатой 🤗
#вопросы_с_собеседований
Что такое класс хранения?
Класс, который определяет срок существования, компоновку и расположение переменных/функций в памяти.
В C ++ поддерживаются такие классы хранения: auto, static, register, extern и mutable.
Обратите внимание, что register устарел для C++11. Для C++17 он был удален и зарезервирован для будущего использования.
Что такое класс хранения?
Класс, который определяет срок существования, компоновку и расположение переменных/функций в памяти.
В C ++ поддерживаются такие классы хранения: auto, static, register, extern и mutable.
Обратите внимание, что register устарел для C++11. Для C++17 он был удален и зарезервирован для будущего использования.
Оффер за 3 дня: будущее инженерии начинается в YADRO.
Запускаем SPRINT OFFER для C++ Software Engineer!
Мы ждем:
Талантливых инженеров с опытом работы на C/С++, уверенным знанием сетей TCP/IP и Linux.
Как принять участие?
1️⃣ Оставьте заявку до 19 октября и пройдите HR-скрининг
2️⃣ Пройдите техническое и менеджерское интервью
3️⃣ Получите оффер в течение 3 дней
О направлении:
Инженеры разрабатывают комплексную платформу для построения современных узлов сотовых сетей, включая базовые станции LTE и GSM. Создаваемая платформа обеспечивает управление всей телеком инфраструктурой: от прикладных компонентов до сетевой топологии.
💙 Не упускайте шанс присоединиться к интересному проекту и работать с инженерами мирового уровня! Успейте подать заявку до 19 октября по ссылке!
Запускаем SPRINT OFFER для C++ Software Engineer!
Мы ждем:
Талантливых инженеров с опытом работы на C/С++, уверенным знанием сетей TCP/IP и Linux.
Как принять участие?
1️⃣ Оставьте заявку до 19 октября и пройдите HR-скрининг
2️⃣ Пройдите техническое и менеджерское интервью
3️⃣ Получите оффер в течение 3 дней
О направлении:
Инженеры разрабатывают комплексную платформу для построения современных узлов сотовых сетей, включая базовые станции LTE и GSM. Создаваемая платформа обеспечивает управление всей телеком инфраструктурой: от прикладных компонентов до сетевой топологии.
Please open Telegram to view this post
VIEW IN TELEGRAM
Нам действительно нужно неопределенное поведение?
https://www.ralfj.de/blog/2021/11/24/ub-necessary.html
https://www.ralfj.de/blog/2021/11/24/ub-necessary.html
www.ralfj.de
Do we really need Undefined Behavior?
I recently published a blog post on why Undefined Behavior is actually not a bad idea. Coincidentally, this is just a few weeks after the publication of this paper by Victor Yodaiken which ...
🗓 8 октября в 20:00 МСК приглашаем на открытый урок OTUS «Как вырастить префиксное дерево». На вебинаре мы пошагово построим префиксное дерево (Trie) для слов из большого текста, добавим счётчики частот и реализуем автодополнение. Вы увидите, как по первым буквам мгновенно находятся все слова с этим префиксом и выводятся самые популярные варианты продолжений.
Урок будет полезен разработчикам, которые хотят глубже понимать работу алгоритмов и применять их для оптимизации поиска, обработки текста и построения быстрых интерфейсов.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
👉Зарегистрируйтесь сейчас и узнайте, как вырастить своё первое Trie-дерево: https://otus.pw/wgfC/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
std::unordered_set
Доступ к элементам
#для_начинающих
std::unordered_set
— это ассоциативный контейнер, который содержит множество уникальных объектов типа Key
. Это позволяет быстро получить доступ к отдельным элементам, поскольку после вычисления хэша он указывает на точный бакет, в который помещен элемент.std::unordered_set
использует хэширование для хранения элементов. Это означает, что каждый элемент контейнера преобразуется в целое число, называемое хеш-значением. Хеш-значения элементов используются для размещения их в бакетах, которые представляют собой массивы элементов.Доступ к элементам
std::unordered_set
осуществляется с помощью их хеш-значений. Это позволяет получить доступ к элементу за время O(1), что быстрее, чем у других ассоциативных контейнеров, таких как std::map
и std::multimap
.#для_начинающих
Requires-expression
Вот основные особенности requires-expression:
— Логическое выражение: Оценивается в
— Используется для проверки:
— Соответствия типам и выражениям концепциям.
— Других требований к типам и выражениям.
Применение:
— Внутри шаблонов.
— Внутри
— Вне шаблонов и
Преимущества использования requires-expression:
— Улучшение читаемости и понятности кода: Требования к типам и выражениям становятся более явными.
— Повышение безопасности кода: Ошибки, связанные с несоответствием типов, выявляются во время компиляции.
— Улучшение производительности: Константные проверки требований позволяют оптимизировать код.
#для_продвинутых
Requires-expression
(выражение требований) – это мощная функциональность, появившаяся в C++20, которая позволяет выражать требования к типам и выражениям непосредственно в коде.Вот основные особенности requires-expression:
— Логическое выражение: Оценивается в
true
или false
во время компиляции.— Используется для проверки:
— Соответствия типам и выражениям концепциям.
— Других требований к типам и выражениям.
Применение:
— Внутри шаблонов.
— Внутри
constexpr
функций.— Вне шаблонов и
constexpr
функций (с ограничениями).Преимущества использования requires-expression:
— Улучшение читаемости и понятности кода: Требования к типам и выражениям становятся более явными.
— Повышение безопасности кода: Ошибки, связанные с несоответствием типов, выявляются во время компиляции.
— Улучшение производительности: Константные проверки требований позволяют оптимизировать код.
#для_продвинутых
Что такое PIMPL?
PIMPL (Pointer to Implementation) — это идиома проектирования в C++, которая используется для управления инкапсуляцией деталей реализации класса и сокрытия их от пользователей класса. Она также известна как «Cheshire Cat» (улыбка Чеширского кота) из-за того, что она позволяет «убрать» детали реализации из интерфейса класса, оставив только указатель на них.
Идея PIMPL заключается в том, чтобы внести все детали реализации класса в отдельную структуру или класс, а затем хранить указатель на эту структуру в основном классе. Таким образом, пользователи класса видят только публичный интерфейс основного класса, а детали реализации остаются скрытыми.
#для_продвинутых
PIMPL (Pointer to Implementation) — это идиома проектирования в C++, которая используется для управления инкапсуляцией деталей реализации класса и сокрытия их от пользователей класса. Она также известна как «Cheshire Cat» (улыбка Чеширского кота) из-за того, что она позволяет «убрать» детали реализации из интерфейса класса, оставив только указатель на них.
Идея PIMPL заключается в том, чтобы внести все детали реализации класса в отдельную структуру или класс, а затем хранить указатель на эту структуру в основном классе. Таким образом, пользователи класса видят только публичный интерфейс основного класса, а детали реализации остаются скрытыми.
#для_продвинутых