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);
}

참고 항목

범위의 크기와 같은 정수를 반환합니다
(customization point object)
범위의 크기와 같은 부호 있는 정수를 반환합니다
(customization point object)