std::ranges::concat_view<뷰...>::size
cppreference.net에서
constexpr auto size()
requires(sized_range<Views> && ...);
|
(1) | (since C++26) |
constexpr auto size() const
requires(sized_range<const Views> && ...);
|
(2) | (since 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
의 복잡도는 상수 시간입니다 (일부 경우에는 연결하는 범위의 개수에 대한 선형 함수이지만, 이는 이 뷰의 정적으로 알려진 매개변수입니다). 이는 범위 개념에서 요구하는 시간 복잡도가 주어진 범위의 정적으로 알려진 매개변수가 아닌 전체 요소 개수(크기)에 대해 공식적으로 표현되기 때문입니다.
예제
이 코드 실행
#include <cassert>
#include <forward_list>
#include <list>
#include <print>
#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::println("con = {}", con);
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::println("cat = {}", cat);
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);
std::println("dog = {}", dog);
}
출력:
con = [1, 2, 1, 2, 3, 1, 2, 3, 4]
cat = [1, 2, 3, 1, 2, 3, 4, 1, 2, 3]
dog = [1, 2, 1, 2, 3, 1, 2, 3, 4]
참고 항목
|
(C++20)
|
범위의 크기와 같은 정수를 반환합니다
(customization point object) |
|
(C++20)
|
범위의 크기와 같은 부호 있는 정수를 반환합니다
(customization point object) |