Sentinel C++20. Пишем свой Sentinel

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

О понятии Sentinel говорят мало, особенно в русскоязычном пространстве. Вместе с Юрием Вашинко, опытным тимлидом и спикером нашего курса «С++ разработчик» сегодня рассмотрим, что такое Sentinel и как его использовать:

В каждом разработчике С++ (до 17 версии) прочно укоренилось понятие итератора, на котором построена по сути вся работа со контейнерами в STL. Но бывают случаи, когда приходится отказываться от использования алгоритмов в угоду собственных реализаций, т.к. они оказываются более выгодными с точки зрения эффективности. 

Для начала давайте напомним всем известные понятия. Контейнеры предоставляют нам итераторы begin() и end(), где begin() указывает на первый элемент контейнера, а end() на «мифический» элемент, который находится «сразу з»” последним элементом. И вот когда начинающие разработчики с этим знакомятся — тут бывает много интересного. Все представляют в первую очередь std::vector, и там можно представить, что находится в конце. Но если спросить —  а что же будет, если этим контейнером является std::map — ответы будут разные. Да и объяснить бывает непросто, что этот элемент, по сути, нереальный.

Лично для меня итератор end() вообще выбивается из хардкорного, строго типизированного и структурированного языка С++.  На момент создания и реализации данной концепции это было хорошим решением, но времена меняются и задачи тоже. Подумаем, а что нам делать, если обрабатывать массив нужно не весь, а закончить обработку в зависимости от значения внутри вектора. Или, к примеру, мы хотим создать бесконечный массив, то есть постоянно дополняемый. Что в таком случае считать признаком окончания? И вот для такого рода задач понимаешь, что нет ничего лучше чем прохода в виде while(true) и выходом по условию. 

Для примера возьмем задачу, где нам нужно первое слово в предложении преобразовать в uppercase.  (Опустим здесь зачем это может понадобится. Многообразие задач заказчика настолько велико, что самая нереальная и порой глупая задача на сегодняшний день может стать острой необходимостью завтра

Источник: https://habr.com/ru/companies/slurm/articles/853526/


Интересные статьи

Интересные статьи

Привет! Хочу поделиться своей историей, как я нашла свою первую работу frontend - разработчиком в 2023 году. Исходные данные: 30 лет, высшее образование по специальности логистика, 10 лет опыта работы...
В ходе работы над проектами бизнес-аналитик сталкивается с различными маркетинговыми явлениями. Часть из них воспринимается однозначно или достаточно близко друг к другу даже в разных предметных облас...
Всем доброго времени суток. Мы решили описать построение отказоустойчивой инфраструктуры для bitrix в рамках серии статей, и сегодня публикуем первую часть. Вариант, который мы будем описывать, - не и...
От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт ...
С версии 12.0 в Bitrix Framework доступно создание резервных копий в автоматическом режиме. Задание параметров автоматического резервного копирования производится в Административной части на странице ...