home | help
std::ranges...p_view::size(3)  C++ Standard Libary std::ranges...p_view::size(3)

NAME
     std::ranges::zip_view::size - std::ranges::zip_view::size

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

	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<de-
     cltype(sizes)...>>;
	      return ranges::min({CT(sizes)...});
	  },
	  /*tuple-transform*/(ranges::size, views_)
      );

Parameters
	(none)

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

Example
     // Run this code

      #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)>);
      }

See also
	ranges::size  returns an integer equal to the size of a range
	(C++20)       (customization point object)
	ranges::ssize returns a signed integer equal to the size of a range
	(C++20)       (customization point object)

http://cppreference.com 	   2024.06.10	   std::ranges...p_view::size(3)

home | help