std::ranges::concat_view<Views...>:: size
|
||||||||||||||||||||||
| Range primitives | |||||||
|
|||||||
| Range concepts | |||||||||||||||||||
|
|||||||||||||||||||
| Range factories | |||||||||
|
|||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||
| Helper items | |||||||||||||||||
|
|
||||||||||||||||
| Member functions | ||||
|
concat_view::size
|
||||
| Deduction guides | ||||
| Iterator | ||||
| Member functions | ||||
| Non-member functions | ||||
|
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)
|
возвращает знаковое целое число, равное размеру диапазона
(объект точки кастомизации) |