Что это?
В стандарте C++20 появился обобщенный класс — std::span (заголовок <span>). Этот класс является частью библиотеки контейнеров, но может быть использован в качестве основы для реализации каких-либо задач в других библиотеках STD. Объект этого класса позволяет получить ссылку на непрерывную последовательность элементов в памяти (последовательный контейнер, Си-массив), но при этом он не будет владеть им, т. е., не сможет копировать или перемещать элементы объекта на который он указывает. Чтобы работа с промежутками была более гибкая, разработчики языка наделили span возможностью изменять значения элементов исходного объекта. Поэтому промежутки нельзя назвать строгим представлением (view), в отличие от range::view.
std::span от std::strig_viewПольза этого шаблона в том, что использование промежутков позволяет избежать ненужного копирования области памяти при передаче аргументов в функцию. Помимо этого, разработчик получает набор готовых инструментов, в виде стандартных функций шаблонов C++, и единообразное оформление программного кода, в котором реализация рутинных задач будет инкапсулирована, и можно сконцентрироваться на самом важном.
span, по каким-либо причинам, будет недостаточно, то следует обратиться к библиотеке range, обладающей более широкими возможностями.