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  >
       (until C++11)
	  void generate_n( OutputIt first, Size	count, Generator g );
	  template<  class   OutputIt,	 class	 Size,	 class	 Generator   >
       (since C++11)
	  OutputIt   generate_n(  OutputIt  first,  Size  count,  Generator  g
       (until C++20)
	  );
	  template< class OutputIt, class Size,	class Generator	>
	  constexpr  OutputIt  generate_n(   OutputIt	first,	 Size	count,
       (since C++20)
	  Generator g );						 (1)
	  template< class ExecutionPolicy, class ForwardIt , class Size,
	  class	Generator >

	  ForwardIt    generate_n(    ExecutionPolicy&&	   policy,   ForwardIt
       (2) (since C++17)
	  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 otherwise.
	  2) Same as (1), but executed according to policy. This overload does
       not participate
	  in overload resolution unless
	  std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>
	  (until C++20)
	  std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>
	  (since C++20)	is true.

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
	  (none)
       (until C++11)
	  Iterator one past  the  last	element	 assigned  if  count>0,	 first
       (since C++11)
	  otherwise.

Complexity
	  Exactly count	invocations of g() and assignments, for	count>0.

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  // void until C++11
	  generate_n( OutputIt first, Size count, Generator g )
	  {
	      for( Size	i = 0; i < count; ++i )	{
		  *first++ = g();
	      }
	      return first;
	  }

Example
       // Run this code

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

	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

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		  2022.07.31		    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.0>

home | help