std::ranges::concat_view<Views...>::size
来自 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) |
返回一个等于范围大小的整数 (定制点对象) |
(C++20) |
返回一个等于范围大小的有符号整数 (定制点对象) |