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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::mismatch - std::mismatch

Synopsis
	  Defined in header <algorithm>
	  template< class InputIt1, class InputIt2 >

	  std::pair<InputIt1,InputIt2>			       (until
	  mismatch( InputIt1 first1, InputIt1 last1,	       C++20)

	  InputIt2 first2 );
	  template< class InputIt1, class InputIt2 >

	  constexpr std::pair<InputIt1,InputIt2>	       (since
	  mismatch( InputIt1 first1, InputIt1 last1,	       C++20)

	  InputIt2 first2 );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2 >

	  std::pair<ForwardIt1,ForwardIt2>		   (2) (since
	  mismatch( ExecutionPolicy&& policy,		       C++17)
	  ForwardIt1 first1, ForwardIt1	last1,

	  ForwardIt2 first2 );
	  template< class InputIt1, class InputIt2,
	  class	BinaryPredicate	>

	  std::pair<InputIt1,InputIt2>				       (until
	  mismatch( InputIt1 first1, InputIt1 last1,		       C++20)
	  InputIt2 first2,

	  BinaryPredicate p );
	  template< class InputIt1, class InputIt2,
	  class	BinaryPredicate	>

	  constexpr std::pair<InputIt1,InputIt2>		       (since
	  mismatch( InputIt1 first1, InputIt1 last1,		       C++20)
	  InputIt2 first2,

	  BinaryPredicate p );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2,

	  class	BinaryPredicate	>
	  std::pair<ForwardIt1,ForwardIt2>		       (4)     (since
	  mismatch( ExecutionPolicy&& policy,			       C++17)
	  ForwardIt1 first1, ForwardIt1	last1,
	  ForwardIt2 first2,

	  BinaryPredicate p );			       (1)
	  template< class InputIt1, class InputIt2 >
									       (since
	  std::pair<InputIt1,InputIt2>
       C++14)
	  mismatch(	   InputIt1	   first1,	 InputIt1	last1,
       (until
									       C++20)
	  InputIt2 first2, InputIt2 last2 );
	  template< class InputIt1, class InputIt2 >

	  constexpr				  std::pair<InputIt1,InputIt2>
       (since
	  mismatch(	InputIt1    first1,    InputIt1	   last1,	   (3)
       C++20)

	  InputIt2 first2, InputIt2 last2 );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2 >

	  std::pair<ForwardIt1,ForwardIt2>				   (6)
       (since
	  mismatch(		     ExecutionPolicy&&		       policy,
       C++17)
	  ForwardIt1 first1, ForwardIt1	last1,

	  ForwardIt2 first2, ForwardIt2	last2 );
	  template< class InputIt1, class InputIt2,
	  class	BinaryPredicate	>
							       (5)
       (since
	  std::pair<InputIt1,InputIt2>
       C++14)
	  mismatch(	  InputIt1	 first1,	InputIt1	last1,
       (until
	  InputIt2	       first2,		   InputIt2		last2,
       C++20)

	  BinaryPredicate p );
	  template< class InputIt1, class InputIt2,
	  class	BinaryPredicate	>

	  constexpr				  std::pair<InputIt1,InputIt2>
       (since
	  mismatch(  InputIt1  first1,	InputIt1  last1,		   (7)
       C++20)
	  InputIt2 first2, InputIt2 last2,

	  BinaryPredicate p );
	  template< class ExecutionPolicy, class
	  ForwardIt1, class ForwardIt2,

	  class	BinaryPredicate	>
	  std::pair<ForwardIt1,ForwardIt2>
       (8)     (since
	  mismatch(		    ExecutionPolicy&&		       policy,
       C++17)
	  ForwardIt1 first1, ForwardIt1	last1,
	  ForwardIt2 first2, ForwardIt2	last2,

	  BinaryPredicate p );

	  Returns  the first mismatching pair of elements from two ranges: one
       defined by
	  [first1, last1) and another defined by [first2,last2). If  last2  is
       not provided
	  (overloads (1-4)), it	denotes	first2 + (last1	- first1).

	  1,5) Elements	are compared using operator==.
	  3,7) Elements	are compared using the given binary predicate p.
	  2,4,6,8)  Same as (1,3,5,7), but 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.

Parameters
	  first1, last1	- the first range of the elements
	  first2, last2	- the second range of the elements
	  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  re-
       gardless	of value
			  category (thus, Type1	& is not allowed
			  , nor	is Type1 unless	for Type1 a move is equivalent
       to a copy
			  (since C++11)).
			  The  types Type1 and Type2 must be such that objects
       of types
			  InputIt1 and InputIt2	can be dereferenced  and  then
       implicitly
			  converted to Type1 and Type2 respectively.

Type requirements
	  -
	  InputIt1 must	meet the requirements of LegacyInputIterator.
	  -
	  InputIt2 must	meet the requirements of LegacyInputIterator.
	  -
	  ForwardIt1 must meet the requirements	of LegacyForwardIterator.
	  -
	  ForwardIt2 must meet the requirements	of LegacyForwardIterator.
	  -
	  BinaryPredicate must meet the	requirements of	BinaryPredicate.

Return value
	  std::pair with iterators to the first	two non-equal elements.

	  If  no  mismatches  are found	when the comparison reaches last1, the
       pair
	  holds	last1 and the corresponding iterator from  the	second	range.
       The  (until C++14)
	  behavior is undefined	if the second range is shorter than the	first
	  range.
	  If  no  mismatches  are  found  when the comparison reaches last1 or
       last2,
	  whichever happens first, the pair holds the  end  iterator  and  the
       (since C++14)
	  corresponding	iterator from the other	range.

Complexity
	  1-4) At most last1 - first1 applications of operator== or the	predi-
       cate p
	  5-8) At most min(last1 - first1, last2 - first2) applications	of op-
       erator==	or the
	  predicate p.

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.

Possible implementation
First version
       template<class InputIt1,	class InputIt2>	std::pair<InputIt1, InputIt2>
	   mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2) {
	   while (first1 != last1 && *first1 ==	*first2) {
	       ++first1, ++first2;
	   }
	   return std::make_pair(first1, first2); }

Second version
       template<class  InputIt1,  class	  InputIt2,   class   BinaryPredicate>
       std::pair<InputIt1, InputIt2>
	   mismatch(InputIt1  first1,  InputIt1	 last1,	InputIt2 first2, Bina-
       ryPredicate p) {
	   while (first1 != last1 && p(*first1,	*first2)) {
	       ++first1, ++first2;
	   }
	   return std::make_pair(first1, first2); }
						 Third version	template<class
       InputIt1, class InputIt2> std::pair<InputIt1, InputIt2>
	   mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2
       last2) {
	   while (first1 != last1 && first2 != last2 &&	*first1	== *first2) {
	       ++first1, ++first2;
	   }
	   return std::make_pair(first1, first2); }
						Fourth	version	template<class
       InputIt1, class InputIt2,  class	 BinaryPredicate>  std::pair<InputIt1,
       InputIt2>
	   mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2
       last2, BinaryPredicate p) {
	   while (first1 != last1 && first2 != last2 &&	p(*first1, *first2)) {
	       ++first1, ++first2;
	   }
	   return std::make_pair(first1, first2); }

Example
	  This program determines the longest substring	that is	simultaneously
       found at	the
	  very beginning of the	given string and at the	very end of it,	in re-
       verse order
	  (possibly overlapping)

       // Run this code

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

	std::string mirror_ends(const std::string& in)
	{
	    return std::string(in.begin(),
			       std::mismatch(in.begin(),   in.end(),   in.rbe-
       gin()).first);
	}

	int main()
	{
	    std::cout << mirror_ends("abXYZba")	<< '\n'
		      << mirror_ends("abca") <<	'\n'
		      << mirror_ends("aba") << '\n';
	}

Output:
	ab
	a
	aba

See also
	  equal			  determines if	two sets of elements  are  the
       same
				  (function template)
	  find
	  find_if		   finds the first element satisfying specific
       criteria
	  find_if_not		  (function template)
	  (C++11)
				  returns true if one range  is	 lexicographi-
       cally less than
	  lexicographical_compare another
				  (function template)
	  search		  searches for a range of elements
				  (function template)
	  ranges::mismatch	   finds  the  first position where two	ranges
       differ
	  (C++20)		  (niebloid)

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

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

home | help