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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::copy_n - std::copy_n

Synopsis
	  Defined in header <algorithm>
	  template<    class   InputIt,	  class	  Size,	  class	  OutputIt   >
       (since C++11)
	  OutputIt copy_n( InputIt  first,  Size  count,  OutputIt  result  );
       (until C++20)
	  template< class InputIt, class Size, class OutputIt >
	  constexpr  OutputIt  copy_n(	InputIt	 first,	 Size  count, OutputIt
       (since C++20)
	  result );							 (1)
	  template< class ExecutionPolicy, class ForwardIt1, class Size,
	  class				 ForwardIt2			     >
       (2) (since C++17)
	  ForwardIt2 copy_n( ExecutionPolicy&& policy, ForwardIt1 first,
	  Size count, ForwardIt2 result	);

	  1)  Copies exactly count values from the range beginning at first to
       the range
	  beginning at result. Formally, for each integer 0  i <  count,  per-
       forms *(result +
	  i)  =	 *(first  +  i).  Overlap of ranges is formally	permitted, but
       leads to
	  unpredictable	ordering of the	results.
	  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	copy from
	  count	   -  number of	the elements to	copy
	  result   -  the beginning of the destination range
	  policy   -  the execution policy to use. See	execution  policy  for
       details.

Type requirements
	  -
	  InputIt must meet the	requirements of	LegacyInputIterator.
	  -
	  OutputIt must	meet the requirements of LegacyOutputIterator.
	  -
	  ForwardIt1,  ForwardIt2  must	 meet  the  requirements of LegacyFor-
       wardIterator.

Return value
	  Iterator in the destination range, pointing past  the	 last  element
       copied if count>0
	  or result otherwise.

Complexity
	  Zero assignments if count < 0; count assignments otherwise.

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 InputIt, class Size, class OutputIt>
	  OutputIt copy_n(InputIt first, Size count, OutputIt result)
	  {
	      if (count	> 0) {
		  *result++ = *first;
		  for (Size i =	1; i < count; ++i) {
		      *result++	= *++first;
		  }
	      }
	      return result;
	  }

Example
       // Run this code

	#include <algorithm>
	#include <iostream>
	#include <iterator>
	#include <numeric>
	#include <string>
	#include <vector>

	int main()
	{
	    std::string	in = "1234567890";
	    std::string	out;

	    std::copy_n(in.begin(), 4, std::back_inserter(out));
	    std::cout << out <<	'\n';

	    std::vector<int> v_in(128);
	    std::iota(v_in.begin(), v_in.end(),	1);
	    std::vector<int> v_out(v_in.size());

	    std::copy_n(v_in.cbegin(), 100, v_out.begin());
	    std::cout <<  std::accumulate(v_out.begin(),  v_out.end(),	0)  <<
       '\n';
	}

Output:
	1234
	5050

See also
	  copy		 copies	a range	of elements to a new location
	  copy_if	 (function template)
	  (C++11)
	  ranges::copy_n copies	a number of elements to	a new location
	  (C++20)	 (niebloid)

http://cppreference.com		  2022.07.31			std::copy_n(3)

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

home | help