std::ranges::concat_view<Views...>::size
来自 cppreference.cn
< cpp | ranges | concat view
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 的复杂度是常数时间(即使在某些情况下,它是其连接的范围数量的线性函数,这是此视图的静态已知参数),因为范围概念要求的时间复杂度是相对于给定范围的元素总数(大小)正式表示的,而不是相对于该范围的静态已知参数。
[编辑] 示例
初步版本可以在 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) |
返回一个等于范围大小的有符号整数 (定制点对象) |