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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::generate_n - std::generate_n

Synopsis
	  Defined in header <algorithm>
	  template< class OutputIt, class Size,	class Generator	>
	  OutputIt generate_n( OutputIt	first, Size count,	   (1) (const-
       expr since C++20)
	  Generator g );
	  template< class ExecutionPolicy,

		    class ForwardIt, class Size, class Generator >
	  ForwardIt  generate_n( ExecutionPolicy&& policy,	    (2)	(since
       C++17)

				ForwardIt first, Size count,
	  Generator g );

	  1) Assigns values, generated by given	 function  object  g,  to  the
       first count elements
	  in  the  range beginning at first, if	count >	0. Does	nothing	other-
       wise.
	  2) Same as (1), but executed according to policy.
	  This overload	participates in	overload resolution only if

	  std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>  is	 true.
       (until
										    C++20)
	  std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>  is
       true. (since
										    C++20)

	  If Size is not convertible to	an integral type, the program is  ill-
       formed.

Parameters
	  first	  - the	beginning of the range of elements to generate
	  count	  - number of the elements to generate
	  policy   - the execution policy to use. See execution	policy for de-
       tails.
		    generator function object that will	be called.

		    The	signature of the function should be equivalent to  the
       following:
	  g	  -
		    Ret	fun();

		    The	 type Ret must be such that an object of type OutputIt
       can be
		    dereferenced and assigned a	value of type Ret.

Type requirements
	  -
	  OutputIt must	meet the requirements of LegacyOutputIterator.
	  -
	  ForwardIt must meet the requirements of LegacyForwardIterator.

Return value
	  Iterator one past the	last element assigned if count > 0, first oth-
       erwise.

Complexity
	  Exactly std::max(0, count) invocations of g()	and assignments.

Exceptions
	  The overload with a template parameter named ExecutionPolicy reports
       errors as
	  follows:

	    * If execution of a	function invoked  as  part  of	the  algorithm
       throws an exception
	      and ExecutionPolicy is one of the	standard policies, std::termi-
       nate is called.
	      For  any	other ExecutionPolicy, the behavior is implementation-
       defined.
	    * If the algorithm fails to	 allocate  memory,  std::bad_alloc  is
       thrown.

Possible implementation
	  template<class OutputIt, class Size, class Generator>
	  constexpr // since C++20
	  OutputIt generate_n(OutputIt first, Size count, Generator g)
	  {
	      for (Size	i = 0; i < count; ++i, ++first)
		  *first = g();

	      return first;
	  }

Example
       // Run this code

	#include <algorithm>
	#include <functional>
	#include <iostream>
	#include <iterator>
	#include <random>

	int main()
	{
	    std::mt19937 rng; // default constructed, seeded with fixed	seed
	    std::generate_n(std::ostream_iterator<std::mt19937::re-
       sult_type>(std::cout, " "),
			    5, std::ref(rng));
	    std::cout << '\n';
	}

Output:
	3499211612 581869302 3890346734	3586334585 545404204

	  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
			     the complexity requirement	was exactly no invoca-
       tion or
	  LWG 426 C++98	     count  invocations			       assign-
       ment
			     or	 assignments,  which is	broken if     if count
       is non-positive
			     count is negative
			     the location of the first element
	  LWG 865 C++98	     following				     returned
			     the generation range was not returned

See also
	  fill_n	     copy-assigns the given value to N elements	 in  a
       range
			     (function template)
			     assigns  the results of successive	function calls
       to every	element
	  generate	     in	a range
			     (function template)
	  ranges::generate_n saves the result of N applications	of a function
	  (C++20)	     (niebloid)

http://cppreference.com		  2024.06.10		    std::generate_n(3)

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

home | help