std::ranges::concat_view<Views...>::size
constexpr auto size()
requires(sized_range<Views> && ...);
| (1) | (начиная с C++26) |
constexpr auto size() const
requires(sized_range<const Views> && ...);
| (2) | (начиная с C++26) |
Возвращает количество элементов.
Эквивалентно returnstd::apply.
(
[](auto...sizes)
{
usingCT=ranges::common_type_t<decltype(sizes)...>;
return(make-unsigned-like-t <CT>(sizes)+...);
},
tuple-transform (ranges::size, views_ )
);
Возвращаемое значение
Как описано выше.
Сложность
Постоянная.
Примечания
Сложность concat_view постоянна (даже несмотря на то, что в некоторых случаях она линейно зависит от количества объединяемых диапазонов, которое является статически известным параметром этого представления), поскольку временная сложность, требуемая концепциями ranges, формально выражается относительно общего количества элементов (размера) заданного диапазона, а не относительно статически известных параметров этого диапазона.
Пример
#include <cassert>
#include <forward_list>
#include <list>
#include <print>
#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::println("con = {}", con);
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::println("cat = {}", cat);
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);
std::println("dog = {}", dog);
}
Вывод:
con = [1, 2, 1, 2, 3, 1, 2, 3, 4] cat = [1, 2, 3, 1, 2, 3, 4, 1, 2, 3] dog = [1, 2, 1, 2, 3, 1, 2, 3, 4]
См. также
|
(C++20) | возвращает целое число, равное размеру диапазона (объект точки настройки) |
|
(C++20) | возвращает знаковое целое число, равное размеру диапазона (объект точки настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/concat_view/size