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
的複雜度是常數時間(即使在某些情況下它是它連線的範圍數量的線性函式,而這又是此檢視的靜態已知引數),因為 ranges 概念所要求的時間複雜度是相對於給定範圍的總元素數(大小)正式表達的,而不是相對於該範圍的靜態已知引數。
[編輯] 示例
初步版本可在 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) |
返回等於範圍大小的有符號整數 (自定義點物件) |