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 |
Пример
См. также
|
(C++20) | задаёт требования к диапазону, размер которого известен за постоянное время (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/approximately_sized_range