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_  )
) ;
に相当します。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Return value、Complexity、Notes、Example、See also)は原文のまま保持しました - HTMLタグ、属性、 タグ内のテキストはすべて保持されています - 書式設定と構造は完全に維持されています

戻り値

上記の通り。

計算量

定数。

注記

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

関連項目

範囲のサイズに等しい整数を返す
(カスタマイゼーションポイントオブジェクト)
範囲のサイズに等しい符号付き整数を返す
(カスタマイゼーションポイントオブジェクト)