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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::unique_copy	- std::unique_copy

Synopsis
	  Defined in header <algorithm>
	  template< class InputIt, class OutputIt >

	  OutputIt  unique_copy(  InputIt  first,  InputIt		(until
       C++20)
	  last,

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

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

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

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

	  ForwardIt2 d_first );
	  template< class InputIt, class OutputIt, class
	  BinaryPredicate >				   (1)

	  OutputIt	 unique_copy(	    InputIt	  first,       InputIt
       (until C++20)
	  last,

	  OutputIt d_first, BinaryPredicate p );
	  template< class InputIt, class OutputIt, class
	  BinaryPredicate >

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

	  OutputIt d_first, BinaryPredicate p );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2,	class
	  BinaryPredicate >
								   (4)
       (since C++17)
	  ForwardIt2 unique_copy( ExecutionPolicy&&
	  policy, ForwardIt1 first, ForwardIt1 last,

	  ForwardIt2 d_first, BinaryPredicate p	);

	  Copies the elements from the range [first, last), to	another	 range
       beginning at
	  d_first  in such a way that there are	no consecutive equal elements.
       Only the	first
	  element of each group	of equal elements is copied.

	  1) Elements are compared using operator==. The behavior is undefined
       if it is	not an
	  equivalence relation.
	  3) Elements are compared using the given binary predicate p. The be-
       havior is
	  undefined if it is not an equivalence	relation.
	  2,4) Same as (1,3), but executed according to	 policy.  These	 over-
       loads 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.

Parameters
	  first, last	-  the range of	elements to process
	  d_first	-  the beginning of the	destination range
	  policy	 -   the execution policy to use. See execution	policy
       for details.
			   binary predicate which returns true if the elements
       should be
			   treated as equal.

			   The signature of the	predicate function  should  be
       equivalent to the
			   following:

			   bool	pred(const Type1 &a, const Type2 &b);

	  p		 -  While the signature	does not need to have const &,
       the function
			   must	not modify the objects passed to it  and  must
       be able to accept
			   all values of type (possibly	const) Type1 and Type2
       regardless of
			   value category (thus, Type1 & is not	allowed
			   ,  nor  is Type1 unless for Type1 a move is equiva-
       lent to a copy
			   (since C++11)).
			   The types Type1 and Type2 must be such that an  ob-
       ject of type
			   InputIt  can	 be  dereferenced  and then implicitly
       converted to both
			   of them.

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.
	  -
	  The type of dereferenced InputIt must	meet the requirements of Copy-
       Assignable. if
	  InputIt does not satisfy LegacyForwardIterator
	  -
	  The type of dereferenced InputIt must	meet the requirements of Copy-
       Constructible. if
	  neither  InputIt nor OutputIt	satisfies LegacyForwardIterator, or if
       InputIt does not
	  satisfy LegacyForwardIterator	and the	value type of InputIt  differs
       from that of
	  OutputIt.

Return value
	  Output iterator to the element past the last written element.

Complexity
	  For nonempty ranges, exactly std::distance(first, last) - 1 applica-
       tions of	the
	  corresponding	predicate.

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.

Notes
	  If InputIt satisfies LegacyForwardIterator,  this  function  rereads
       the input in order
	  to detect duplicates.

	  Otherwise,  if  OutputIt  satisfies  LegacyForwardIterator,  and the
       value type of
	  InputIt is the same as  that	of  OutputIt,  this  function  compare
       *d_first	to *first.

	  Otherwise, this function compares *first to a	local element copy.

	  For  the  overloads  with an ExecutionPolicy,	there may be a perfor-
       mance cost if the
	  value	type of	ForwardIterator1 is  not  both	CopyConstructible  and
       CopyAssignable.

Possible implementation
	  See also the implementations in libstdc++ and	libc++.

Example
       // Run this code

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

	int main()
	{
	    std::string	s1 = "The      string	 with many	 spaces!";
	    std::cout << "before: " << s1 << '\n';

	    std::string	s2;
	    std::unique_copy(s1.begin(), s1.end(), std::back_inserter(s2),
			     [](char c1, char c2){ return c1 ==	' ' && c2 == '
       '; });

	    std::cout << "after:  " << s2 << '\n';
	}

Output:
	before:	The	 string	   with	many	   spaces!
	after:	The string with	many spaces!

See also
			      finds  the  first	 two  adjacent	items that are
       equal (or satisfy a
	  adjacent_find	      given predicate)
			      (function	template)
	  unique	      removes  consecutive  duplicate  elements	 in  a
       range
			      (function	template)
	  copy		      copies a range of	elements to a new location
	  copy_if	      (function	template)
	  (C++11)
	  ranges::unique_copy  creates	a  copy	of some	range of elements that
       contains	no
	  (C++20)	      consecutive duplicates
			      (niebloid)

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

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

home | help