std::ranges::concat_view<Views...>::size
From cppreference.com
< cpp | ranges | concat view
| 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); }
[編集] 関連項目
| (C++20) |
rangeのサイズと等しい整数を返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
rangeのサイズと等しい符号付き整数を返す (カスタマイゼーションポイントオブジェクト) |