Namespaces
Variants

std::ranges::iota_view<W, Bound>::size

From ru.cppreference.net
 
 
Ranges library
Range adaptors
 
 
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>;
(since 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()); // Ошибка: size() отсутствует, так как "u" неограничен
}

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3610 C++20 size может отклонять integer-class типы принимать, если возможно

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

возвращает целое число, равное размеру диапазона
(объект точки кастомизации)
возвращает знаковое целое число, равное размеру диапазона
(объект точки кастомизации)