Spec-Zone.ru › C++

диапазон произвольного доступа известного размера

template< class T >
concept /*sized-random-access-range*/ =
    ranges::random_access_range<T> &&
    ranges::sized_range<T>;
(начиная с C++26)
(только для экспозиции*)

Концепт, используемый только для экспозиции, sized-random-access-range задаёт требования к типу range, который знает свой размер за постоянное время и предоставляет произвольный доступ к своим элементам.

Примечания

sized-random-access-range используется параллельными алгоритмами для диапазонов, чтобы отклонять аргументы в виде неограниченных диапазонов. Причины этого следующие:

  • Для эффективной параллельной реализации необходимо знать границы пространства итераций. В противном случае сложно применить стратегию «разделяй и властвуй» для распределения работы между несколькими потоками выполнения.
  • Хотя последовательные алгоритмы для диапазонов допускают передачу «бесконечного» диапазона, например std::ranges::views::iota(0), это может привести к бесконечному циклу. Сложно представить, какую пользу это может принести при параллельном выполнении. Требование к ограниченности последовательностей данных потенциально позволяет предотвращать ошибки во время выполнения.
  • Использование явно ограниченных выходных диапазонов соответствует сложившимся практикам безопасного программирования, которые рекомендуют или даже требуют всегда указывать размер выходных данных, чтобы предотвратить модификацию данных за пределами диапазона.
  • Если несколько входных диапазонов или последовательностей ограничены, алгоритм обычно должен остановиться, как только будет достигнут конец самого короткого из них. В стандарте уже есть примеры алгоритмов, которые принимают две последовательности, потенциально имеющие разные размеры, и выбирают меньший размер в качестве числа итераций, например std::ranges::transform и std::ranges::mismatch.
  • Поскольку выходные последовательности данных ограничены, больше не предполагается, что в них достаточно места для всех входных данных. Поэтому возможно, что алгоритм обработает не все элементы входных последовательностей, и имеет смысл возвращать итераторы на позиции в этих последовательностях, где обработка остановилась.

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/sized-random-access-range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API