std::ranges::iota_view<W, Bound>::size
constexpr auto size() const
requires (std::same_as<W, Bound> && /*advanceable*/<W>) ||
(/*is-integer-like*/<W> && /*is-integer-like*/<Bound>) ||
std::sized_sentinel_for<Bound, W>;
| (начиная с C++20) |
Возвращает размер представления, если оно ограничено.
Определения /*advanceable*/ и /*is-integer-like*/ см. соответственно в advanceable и is-integer-like.
Возвращаемое значение
Если хотя бы один из W и Bound не является целочисленным типом, возвращает to-unsigned-like (bound_ - value_ ).
В противном случае возвращает (value_ <0)?.
(
(bound_ <0)?
to-unsigned-like (-value_ )- to-unsigned-like (-bound_ ):
to-unsigned-like (bound_ )+ to-unsigned-like (-value_ )
):
to-unsigned-like (bound_ )- to-unsigned-like (value_ )
Пример
#include <cassert>
#include <ranges>
int main()
{
unsigned initial_value{1}, bound{5};
auto i{std::views::iota(initial_value, bound)};
assert(i.size() == bound - initial_value and i.size() == 4);
auto u{std::views::iota(8)};
// assert(u.size()); // Error: size() is not present since “u” is unbounded
}
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 3610 | C++20 |
size может отклонять целочисленные типы-классы | принимать, если возможно |
См. также
|
(C++20) | возвращает целое число, равное размеру диапазона (объект точки настройки) |
|
(C++20) | возвращает целое число со знаком, равное размеру диапазона (объект точки настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/iota_view/size