Namespaces
Variants

std::ranges::approximately_sized_range

С ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
Определён в заголовке <ranges>
template< class T >
concept approximately_sized_range = ranges::range<T> &&
    requires(T& t) {
        ranges::reserve_hint(t);
    };
(начиная с C++26)

Концепт approximately_sized_range задаёт требования к типу range, который может оценивать свой размер за константное время с помощью функции reserve_hint.

Семантические требования

Для lvalue t типа std:: remove_reference_t < T > , T моделирует approximately_sized_range только если

  • ranges :: reserve_hint ( t )
  • имеет амортизированную постоянную временную сложность,
  • не изменяет значение t способом, наблюдаемым для сохраняющих равенство выражений, и
  • имеет значение, которое неотрицательно и представимо в ranges:: range_difference_t < T > , и
  • если ranges:: iterator_t < T > моделирует forward_iterator , ranges :: reserve_hint ( t ) является корректно определённым независимо от вычисления ranges:: begin ( t ) (другими словами, однопроходный диапазон с приблизительным размером может поддерживать вызов reserve_hint только до первого вызова begin , но прямой диапазон должен поддерживать размер в любое время).

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range

Пример

Смотрите также

определяет, что диапазон знает свой размер за постоянное время
(концепт)