Namespaces
Variants

std::ranges::concat_view<Views...>:: size

From cppreference.net
Ranges library
Range adaptors
constexpr auto size ( )
requires ( sized_range < Views > && ... ) ;
(1) (начиная с C++26)
constexpr auto size ( ) const
requires ( sized_range < const Views > && ... ) ;
(2) (начиная с C++26)

Возвращает количество элементов.

Эквивалентно return std:: apply
(
[ ] ( auto ... sizes )
{
using CT = ranges:: common_type_t < decltype ( sizes ) ... > ;
return ( make-unsigned-like-t  < CT > ( sizes ) + ... ) ;
} ,
tuple-transform  ( ranges:: size , views_  )
) ;
.

Содержание

Возвращаемое значение

Как описано выше.

Сложность

Константа.

Примечания

Сложность concat_view является постоянной (даже несмотря на то, что в некоторых случаях она представляет собой линейную функцию от количества объединяемых диапазонов, которое является статически известным параметром данного представления), поскольку временная сложность, требуемая концепциями диапазонов, формально выражается относительно общего количества элементов (размера) заданного диапазона, а не статически известных параметров этого диапазона.

Пример

Предварительную версию можно посмотреть на Compiler Explorer .

#include <cassert>
#include <forward_list>
#include <list>
#include <ranges>
int main()
{
    constexpr static auto a = {1, 2};
    constexpr static auto b = {1, 2, 3};
    constexpr static auto c = {1, 2, 3, 4};
    constexpr auto con{std::views::concat(a, b, c)};
    static_assert(std::ranges::sized_range<decltype(con)>);
    static_assert(con.size() == 2 + 3 + 4);
    std::forward_list d = b;
    static_assert(not std::ranges::sized_range<std::forward_list<int>>);
    const auto cat{std::views::concat(b, c, d)};
    static_assert(not std::ranges::sized_range<decltype(cat)>);
//  auto x = cat.size(); // error: cat is not sized_range because of d
    std::list e = c;
    const auto dog{std::views::concat(a, b, e)};
    static_assert(std::ranges::sized_range<decltype(dog)>);
    assert(dog.size() == 2 + 3 + 4);
}

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

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