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

FreeBSD Manual Pages

  
 
  

home | help
std::ranges::ref_view(3)      C++ Standard Libary     std::ranges::ref_view(3)

NAME
       std::ranges::ref_view - std::ranges::ref_view

Synopsis
	  Defined in header <ranges>
	  template<ranges::range R>

	  requires  std::is_object_v<R>					(since
       C++20)

	  class	ref_view : public ranges::view_interface<ref_view<R>>

	  ref_view is a	view of	the elements of	some other range. It  wraps  a
       reference to that
	  range.

	 Data members

	  ref_view behaves as if it only stores	a R* member subobject pointing
       to the
	  referenced  range. The member	is shown as r_ here (the name is expo-
       sition-only).

Member functions
	  constructor	constructs a ref_view that  references	to  the	 given
       range
	  (C++20)	(public	member function)
	  base		returns	the references to the referenced range
	  (C++20)	(public	member function)
	  begin		returns	the beginning iterator of the referenced range
	  (C++20)	(public	member function)
	  end		returns	the sentinel of	the referenced range
	  (C++20)	(public	member function)
	  empty		checks whether the referenced range is empty
	  (C++20)	(public	member function)
	  size		returns	the size of the	referenced sized_range
	  (C++20)	(public	member function)
	  data		returns	the pointer to the beginning of	the referenced
	  (C++20)	contiguous_range
			(public	member function)
		Inherited from std::ranges::view_interface
	  operator  bool  Returns  whether the derived view is not empty. Pro-
       vided if
	  (C++20)	ranges::empty is applicable to it.
			(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  front		 Returns  the  first element in	the derived view. Pro-
       vided if	it
	  (C++20)	satisfies forward_range.
			(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  back		Returns	the last element in the	derived	view. Provided
       if it satisfies
	  (C++20)	bidirectional_range and	common_range.
			(public	 member	 function  of std::ranges::view_inter-
       face<D>)
	  operator[]	Returns	the nth	element	in the derived view.  Provided
       if it satisfies
	  (C++20)	random_access_range.
			(public	 member	 function  of std::ranges::view_inter-
       face<D>)

       std::ranges::ref_view::ref_view

	  template</*different-from*/<ref_view>	T>

	  requires    std::convertible_to<T,	 R&>	 &&	requires     {
       (since C++20)
	  _FUN(std::declval<T>()); }

	  constexpr ref_view(T&& t);

	  Initializes	 r_    with   std::addressof(static_cast<R&>(std::for-
       ward<T>(t))).

	  /*different-from*/<T,	U>  is	satisfied  if  and  only  if  std::re-
       move_cvref_t<T> and
	  std::remove_cvref_t<U>  are not the same type, and overloads of _FUN
       are declared as
	  void _FUN(R&); void _FUN(R&&)	= delete;.

Parameters
	  t - range to reference

       std::ranges::ref_view::base

	  constexpr R& base() const;  (since C++20)

	  Equivalent to	return *r_;

       std::ranges::ref_view::begin

	  constexpr ranges::iterator_t<R> begin() const;  (since C++20)

	  Equivalent to	return ranges::begin(*r_);

       std::ranges::ref_view::end

	  constexpr ranges::sentinel_t<R> end()	const;	(since C++20)

	  Equivalent to	return ranges::end(*r_);

       std::ranges::ref_view::empty

	  constexpr bool empty() const		      (since C++20)
	  requires requires { ranges::empty(*r_); };

	  Equivalent to	return ranges::empty(*r_);

       std::ranges::ref_view::size

	  constexpr auto size()	const

	  requires ranges::sized_range<R>  (since C++20)

	  { return ranges::size(*r_); }

       std::ranges::ref_view::data

	  constexpr auto data()	const

	  requires ranges::contiguous_range<R>	(since C++20)

	  { return ranges::data(*r_); }

	 Deduction guides

	  template<class R>		(since C++20)
	  ref_view(R&) -> ref_view<R>;

	 Helper	templates

	  template<class T>
	  inline constexpr bool	 enable_borrowed_range<ranges::ref_view<T>>  =
       (since C++20)
	  true;

	  This	 specialization	 of  std::ranges::enable_borrowed_range	 makes
       ref_view	satisfy
	  borrowed_range.

Example
       // Run this code

	#include <ranges>
	#include <iostream>

	int main()
	{
	    const std::string s{"cosmos"};

	    const std::ranges::take_view tv{s, 3};
	    const std::ranges::ref_view	rv{tv};

	    std::cout
		<< std::boolalpha
		<< "call empty() : " <<	rv.empty() << '\n'
		<< "call size()	 : " <<	rv.size() << '\n'
		<< "call begin() : " <<	*rv.begin() << '\n'
		<< "call end()	 : " <<	*(rv.end()-1) << '\n'
		<< "call data()	 : " <<	rv.data() << '\n'
		<< "call base()	  :  "	<<  rv.base().size()  <<  '\n'	//  ~>
       tv.size()
		<< "range-for	 : ";

	    for	(const auto c: rv) { std::cout << c; }
	    std::cout << '\n';
	}

Output:
	call empty() : false
	call size()  : 3
	call begin() : c
	call end()   : s
	call data()  : cosmos
	call base()  : 3
	range-for    : cos

	 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
			     default constructor was provided  as      removed
       along with the
	  P2325R3  C++20      view				      require-
       ment
			     must be default_initializable

See also
	  reference_wrapper   CopyConstructible	and  CopyAssignable  reference
       wrapper
	  (C++11)	      (class template)
	  ranges::owning_view a	view with unique ownership of some range
	  (C++20)	      (class template)
	  views::all_t	      a	view that includes all elements	of a range
	  views::all	      (alias template) (range adaptor object)
	  (C++20)

http://cppreference.com		  2022.07.31	      std::ranges::ref_view(3)

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

home | help