Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges..._view::begin(3) C++ Standard Libarystd::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
       simple 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-qual-
       ified underlying
	  view type Base_, which is V (for overload (1)) or const V (for over-
       load (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_itera-
       tor(ranges::begin(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	= {"x"sv, "y"sv, ""sv, ""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:
	x
	Ax

	  Defect reports

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

	    DR	     Applied	to		   Behavior    as    published
       Correct 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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::take_view::begin&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help