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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::ranges::fill - std::ranges::fill

Synopsis
	  Defined in header <algorithm>
	  Call signature
	  template< class T, std::output_iterator<const
	  T&>  O,  std::sentinel_for<O>	 S  >				(since
       C++20)
	  constexpr O fill( O first,  S	 last,	const  T&		(until
       C++26)
	  value	);
	  template< class O, std::sentinel_for<O> S, class
	  T = std::iter_value_t<O> >

	  requires   std::output_iterator<O,  const  T&>		(since
       C++26)

	  constexpr O fill( O first, S last, const T&
	  value	);					   (1)
	  template< class T, ranges::output_range<const
	  T&>				    R				     >
       (since C++20)
	  constexpr	       ranges::borrowed_iterator_t<R>		 fill(
       (until C++26)
	  R&& r, const T& value	);
	  template< class R, class T =
	  std::range_value_t<R>	>			       (2)

	  requires	   ranges::output_range<R,	    const	   T&>
       (since C++26)

	  constexpr ranges::borrowed_iterator_t<R> fill(
	  R&& r, const T& value	);

	  1)  Assigns  the  given  value  to the elements in the range [first,
       last).
	  2) Same as (1), but  uses  r	as  the	 source	 range,	 as  if	 using
       ranges::begin(r)	as
	  first	and ranges::end(r) as last.

	  The  function-like  entities	described  on this page	are niebloids,
       that is:

	    * Explicit template	argument lists cannot be specified when	 call-
       ing any of them.
	    * None of them are visible to argument-dependent lookup.
	    *  When  any of them are found by normal unqualified lookup	as the
       name to the left
	      of the function-call operator, argument-dependent	lookup is  in-
       hibited.

	  In  practice,	 they  may be implemented as function objects, or with
       special compiler
	  extensions.

Parameters
	  first, last -	the range of elements to modify
	  r	      -	the range of elements to modify
	  value	      -	the value to be	assigned

Return value
	  An output iterator that compares equal to last.

Complexity
	  Exactly last - first assignments.

Possible implementation
	  struct fill_fn
	  {
	      template<class   O,   std::sentinel_for<O>   S,	class	T    =
       std::iter_value_t<O>>
	      requires std::output_iterator<O, const T&>
	      constexpr	O operator()(O first, S	last, const T& value) const
	      {
		  while	(first != last)
		      *first++ = value;

		  return first;
	      }

	      template<class R,	class T	= std::range_value_t<R>>
	      requires ranges::output_range<R, const T&>
	      constexpr	ranges::borrowed_iterator_t<R> operator()(R&& r, const
       T& value) const
	      {
		  return (*this)(ranges::begin(r), ranges::end(r), value);
	      }
	  };

	  inline constexpr fill_fn fill;

Notes
		    Feature-test       macro		     Value	   Std
       Feature
	  __cpp_lib_algorithm_default_value_type 202403	(C++26)	 List-initial-
       ization for
								algorithms
       (1,2)

Example
       // Run this code

	#include <algorithm>
	#include <complex>
	#include <iostream>
	#include <vector>

	void println(const auto& seq)
	{
	    for	(const auto& e : seq)
		std::cout << e << ' ';
	    std::cout << '\n';
	}

	int main()
	{
	    std::vector<int> v{0, 1, 2,	3, 4, 5};

	    // set all elements	to -1 using overload (1)
	    std::ranges::fill(v.begin(), v.end(), -1);
	    println(v);

	    // set all element to 10 using overload (2)
	    std::ranges::fill(v, 10);
	    println(v);

	    std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}};
	    println(nums);
	    #ifdef __cpp_lib_algorithm_default_value_type
		std::ranges::fill(nums,	{4, 2}); // T gets deduced
	    #else
		std::ranges::fill(nums,	std::complex<double>{4,	2});
	    #endif
	    println(nums);
	}

Output:
	-1 -1 -1 -1 -1 -1
	10 10 10 10 10 10
	(1,3) (2,2) (4,8)
	(4,2) (4,2) (4,2)

See also
	  ranges::fill_n	  assigns a value to a number of elements
	  (C++20)		  (niebloid)
	  ranges::copy
	  ranges::copy_if	  copies a range of elements to	a new location
	  (C++20)		  (niebloid)
	  (C++20)
	  ranges::generate	  saves	the result of a	function in a range
	  (C++20)		  (niebloid)
	  ranges::transform	  applies a function to	a range	of elements
	  (C++20)		  (niebloid)
	  ranges::generate_random  fills  a  range  with random	numbers	from a
       uniform random bit
	  (C++26)		  generator
				  (niebloid)
	  fill			  copy-assigns the given value to  every  ele-
       ment in a range
				  (function template)

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

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

home | help