< cpp‎ | ranges‎ | zip view
Ranges library
Range access
Range conversions

Range primitives

Dangling iterator handling
Range concepts

Range factories
Range adaptors
Range generators
Range adaptor objects
Range adaptor closure objects
Helper items
(until C++23)(C++23)

constexpr auto size()
    requires (ranges::sized_range<Views> && ...);
(1) (since C++23)
constexpr auto size() const
    requires (ranges::sized_range<const Views> && ...);
(2) (since C++23)

Returns the number of elements in the zip_view. Provided only if each underlying (adapted) range satisfies sized_range.

Equivalent to:

return std::apply
    [](auto... sizes)
        using CT = /*make-unsigned-like-t*/<std::common_type_t<decltype(sizes)...>>;
        return ranges::min({CT(sizes)...});
    /*tuple-transform*/(ranges::size, views_)


[edit] Parameters


[edit] Return value

The number of elements, which is the minimum size among all sizes of adapted views.

[edit] Example

#include <algorithm>
#include <cassert>
#include <deque>
#include <forward_list>
#include <ranges>
#include <vector>
int main()
    auto x = std::vector{1, 2, 3, 4, 5};
    auto y = std::deque{'a', 'b', 'c'};
    auto z = std::forward_list{1., 2.};
    auto v1 = std::views::zip(x, y);
    assert(v1.size() == std::min(x.size(), y.size()));
    assert(v1.size() == 3);
    [[maybe_unused]] auto v2 = std::views::zip(x, z);
//  auto sz = v2.size(); // Error, v2 does not have size():
    static_assert(not std::ranges::sized_range<decltype(z)>);

[edit] See also

returns an integer equal to the size of a range
(customization point object)[edit]
returns a signed integer equal to the size of a range
(customization point object)[edit]