home | help
std::ranges..._view::begin(3)  C++ Standard Libary std::ranges..._view::begin(3)

NAME
     std::ranges::take_view::begin - std::ranges::take_view::begin

Synopsis
	constexpr auto begin() requires (!__SimpleView<V>);	      (1) (since
     C++20)
	constexpr auto begin() const requires ranges::range<const V>; (2) (since
     C++20)

	Returns an iterator to the first element of the take_view.

	1) Returns a std::counted_iterator or a ranges::iterator_t<V>.
	2) Returns a std::counted_iterator or a ranges::iterator_t<const V>.

	Overload  (1) does not participate in overload resolution if V is a sim-
     ple view (that
	is, if V and const V are views	with  the  same  iterator  and	sentinel
     types).

Parameters
	(none)

Return value
	The result depends on the concepts satisfied by possibly const-qualified
     underlying
	view  type Base_, which is V (for overload (1)) or const V (for overload
     (2)).

	Let base_ be the underlying view, count_ be the  number  passed  to  the
     constructor (0
	if default initialized).

	The underlying				 random_access_range
	view satisfies
	      ...		yes				    no
					     std::counted_iterator(ranges::be-
     gin(base_),
		    yes ranges::begin(base_)
	sized_range
					     ranges::range_differ-
     ence_t<Base_>(this->size()))
		    no	std::counted_iterator(ranges::begin(base_), count_)

Example
     // Run this code

      #include <concepts>
      #include <forward_list>
      #include <iostream>
      #include <ranges>
      #include <string_view>
      #include <type_traits>
      using namespace std::literals;

      int main()
      {
	  {
	      static constexpr auto v = {"ax"sv, "ay"sv, "I<micro>"sv, "I'"sv};
	      auto view = std::ranges::take_view(v, 8);
	      auto iter = view.begin();
	      std::cout << *iter << '\n';
	      static_assert(
		  std::ranges::sized_range<decltype(v)> and
		  std::ranges::random_access_range<decltype(v)> and
		  std::is_same_v<decltype(iter),       decltype(std::ranges::be-
     gin(v))>
	      );
	  }

	  {
	      std::forward_list v = {"Ax"sv, "Ey"sv, "p"sv, "q"sv};
	      auto view = std::ranges::take_view(v, 8);
	      auto iter = view.begin();
	      std::cout << *iter << '\n';
	      static_assert(
		  not std::ranges::sized_range<decltype(v)> and
		  not std::ranges::random_access_range<decltype(v)> and
		  std::is_same_v<decltype(iter),
		      std::counted_iterator<
			  std::forward_list<std::string_view>::iterator>>
	      );
	  }
      }

Output:
      ax
      Ax

	Defect reports

	The following behavior-changing defect	reports  were  applied	retroac-
     tively to
	previously published C++ standards.

	  DR	Applied to		Behavior as published		    Cor-
     rect behavior
	P2393R1 C++20	   implicit conversions between signed and unsigned made
     explicit
			   integer-class types might fail

See also
	end		 returns an iterator or a sentinel to the end
	(C++20) 	 (public member function)
	counted_iterator iterator adaptor that tracks the distance to the end of
     the range
	(C++20) 	 (class template)
	operator==	  compares  a  sentinel  with  an iterator returned from
     take_view::begin
	(C++20) 	 (function)

http://cppreference.com 	   2024.06.10	   std::ranges..._view::begin(3)

home | help