Spec-Zone.ru › C++

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 может отклонять целочисленные типы-классы принимать, если возможно

См. также

ranges::size
(C++20)
возвращает целое число, равное размеру диапазона
(объект точки настройки)
ranges::ssize
(C++20)
возвращает целое число со знаком, равное размеру диапазона
(объект точки настройки)

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

Spec-Zone.ru

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