Namespaces
Variants
Actions

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

From cppreference.com
< cpp‎ | ranges‎ | iota view
 
 
Ranges library
 
std::ranges::iota_view
iota_view::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>;
(since C++20)

Returns the size of the view if the view is bounded.

For the definitions of /*advanceable*/ and /*is-integer-like*/, see advanceable and is-integer-like respectively.

[edit] Return value

If any of W and Bound is not a integer-like type, returns to-unsigned-like  (bound_  - value_  ).

Otherwise, returns (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_  )
.

[edit] Example

Run this code
#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
}

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 3610 C++20 size might reject integer-class types accept if possible

[edit] See also

returns an integer equal to the size of a range
(customization point object)[edit]
returns a signed integer equal to the size of a range
(customization point object)[edit]

AltStyle によって変換されたページ (->オリジナル) /