名前空間
変種
操作

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

From cppreference.com
< cpp‎ | ranges‎ | concat view
 
 
Rangesライブラリ
Rangeアダプタ
 
 
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);
}

[編集] 関連項目

rangeのサイズと等しい整数を返す
(カスタマイゼーションポイントオブジェクト)[編集]
rangeのサイズと等しい符号付き整数を返す
(カスタマイゼーションポイントオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)