Spec-Zone.ru › C++

std::ranges::approximately_sized_range

Определён в заголовке <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.

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

Пусть t — lvalue типа std::remove_reference_t<T>. T моделирует approximately_sized_range только если

  • ranges::reserve_hint(t)
    • имеет амортизированную сложность O(1),
    • не изменяет значение 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

Пример

См. также

ranges::sized_range
(C++20)
задаёт требования к диапазону, размер которого известен за постоянное время
(концепт)

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

Spec-Zone.ru

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