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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::exclusive_scan - std::exclusive_scan

Synopsis
	  Defined in header <numeric>
	  template< class InputIt, class OutputIt, class T
	  >
								   (since
       C++17)
	  OutputIt  exclusive_scan(  InputIt  first,  InputIt		(until
       C++20)
	  last,

	  OutputIt d_first, T init );
	  template< class InputIt, class OutputIt, class T
	  >

	  constexpr  OutputIt  exclusive_scan(	InputIt			(since
       C++20)
	  first, InputIt last,

	  OutputIt d_first, T init );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2,	class T	>

	  ForwardIt2   exclusive_scan(	ExecutionPolicy&&	   (2)	(since
       C++17)
	  policy, ForwardIt1 first, ForwardIt1 last,

	  ForwardIt2 d_first, T	init );
	  template< class InputIt, class OutputIt,
							   (1)
	  class	T, class BinaryOperation >
	  OutputIt	exclusive_scan(	     InputIt	  first,       InputIt
       (since C++17)
	  last,
       (until C++20)

	  OutputIt d_first, T init, BinaryOperation
	  binary_op );
	  template< class InputIt, class OutputIt,

	  class	T, class BinaryOperation >
	  constexpr	     OutputIt	       exclusive_scan(	       InputIt
       (since C++20)
	  first, InputIt last,				       (3)

	  OutputIt d_first, T init, BinaryOperation
	  binary_op );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2,

	  class	T, class BinaryOperation >
	  ForwardIt2   exclusive_scan(	  ExecutionPolicy&&		   (4)
       (since C++17)
	  policy, ForwardIt1 first, ForwardIt1 last,

	  ForwardIt2 d_first, T	init, BinaryOperation
	  binary_op );

	  Computes  an	exclusive  prefix  sum	operation  using binary_op (or
       std::plus<>() for
	  overloads (1-2)) for the range [first, last),	using init as the ini-
       tial value, and
	  writes the results to	the range beginning  at	 d_first.  "exclusive"
       means that the
	  i-th input element is	not included in	the i-th sum.

	  Formally,  assigns  through  each  iterator i	in [d_first, d_first +
       (last - first)) the
	  value	of the generalized noncommutative sum of init, *j... for every
       j in [first,
	  first	+ (i - d_first)) over binary_op,

	  where	generalized noncommutative sum GNSUM(op, a
	  1, ..., a
	  N) is	defined	as follows:

	    * if N=1, a
	      1
	    * if N > 1,	op(GNSUM(op, a
	      1, ..., a
	      K), GNSUM(op, a
	      M, ..., a
	      N)) for any K where 1 < K+1 = M  N

	  In other words, the summation	operations may be performed  in	 arbi-
       trary order, and
	  the behavior is nondeterministic if binary_op	is not associative.

	  Overloads (2,4) are executed according to policy. These overloads do
       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.

	  binary_op  shall  not	invalidate iterators (including	the end	itera-
       tors) or	subranges,
	  nor modify elements in the ranges [first, last) or [d_first, d_first
       + (last -
	  first)). Otherwise, the behavior is undefined.

Parameters
	  first, last  -  the range of elements	to sum
	  d_first      -  the beginning	of the destination range; may be equal
       to first
	  policy       -  the execution	policy to use.	See  execution	policy
       for details.
	  init	       -  the initial value
			  binary FunctionObject	that will be applied in	to the
       result of
	  binary_op	-   dereferencing  the input iterators,	the results of
       other binary_op,
			  and init.

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.
	  -
	  T   must   meet  the	requirements  of  MoveConstructible.  and  bi-
       nary_op(init, *first),
	  binary_op(init, init), and binary_op(*first, *first)	must  be  con-
       vertible	to T

Return value
	  Iterator to the element past the last	element	written.

Complexity
	  O(last - first) applications of the binary operation

Exceptions
	  The overloads	with a template	parameter named	ExecutionPolicy	report
       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.

Example
       // Run this code

	#include <functional>
	#include <iostream>
	#include <iterator>
	#include <numeric>
	#include <vector>

	int main()
	{
	  std::vector data {3, 1, 4, 1,	5, 9, 2, 6};

	  std::cout << "exclusive sum: ";
	  std::exclusive_scan(data.begin(), data.end(),
			      std::ostream_iterator<int>(std::cout, " "),
			      0);
	  std::cout << "\ninclusive sum: ";
	  std::inclusive_scan(data.begin(), data.end(),
			      std::ostream_iterator<int>(std::cout, " "));

	  std::cout << "\n\nexclusive product: ";
	  std::exclusive_scan(data.begin(), data.end(),
			      std::ostream_iterator<int>(std::cout, " "),
			      1, std::multiplies<>{});
	  std::cout << "\ninclusive product: ";
	  std::inclusive_scan(data.begin(), data.end(),
			      std::ostream_iterator<int>(std::cout, " "),
			      std::multiplies<>{});
	}

Output:
	exclusive sum: 0 3 4 8 9 14 23 25
	inclusive sum: 3 4 8 9 14 23 25	31

	exclusive product: 1 3 3 12 12 60 540 1080
	inclusive product: 3 3 12 12 60	540 1080 6480

See also
				   computes the	differences  between  adjacent
       elements	in a
	  adjacent_difference	   range
				   (function template)
	  accumulate		   sums	up a range of elements
				   (function template)
	  partial_sum		   computes the	partial	sum of a range of ele-
       ments
				   (function template)
	  transform_exclusive_scan  applies  an	invocable, then	calculates ex-
       clusive scan
	  (C++17)		   (function template)
	  inclusive_scan	   similar to std::partial_sum,	 includes  the
       ith input element
	  (C++17)		   in the ith sum
				   (function template)

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

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

home | help