Defined in header <algorithm> | ||
---|---|---|
(1) | ||
template< class InputIt1, class InputIt2 > std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2 ); | (until C++20) | |
template< class InputIt1, class InputIt2 > constexpr std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2 ); | (since C++20) | |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 > std::pair<ForwardIt1,ForwardIt2> mismatch( ExecutionPolicy&& policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 ); | (2) | (since C++17) |
(3) | ||
template< class InputIt1, class InputIt2, class BinaryPredicate > std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p ); | (until C++20) | |
template< class InputIt1, class InputIt2, class BinaryPredicate > constexpr std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p ); | (since C++20) | |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate > std::pair<ForwardIt1,ForwardIt2> mismatch( ExecutionPolicy&& policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, BinaryPredicate p ); | (4) | (since C++17) |
(5) | ||
template< class InputIt1, class InputIt2 > std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 ); | (since C++14) (until C++20) | |
template< class InputIt1, class InputIt2 > constexpr std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 ); | (since C++20) | |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 > std::pair<ForwardIt1,ForwardIt2> mismatch( ExecutionPolicy&& policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2 ); | (6) | (since C++17) |
(7) | ||
template< class InputIt1, class InputIt2, class BinaryPredicate > std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p ); | (since C++14) (until C++20) | |
template< class InputIt1, class InputIt2, class BinaryPredicate > constexpr std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p ); | (since C++20) | |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate > std::pair<ForwardIt1,ForwardIt2> mismatch( ExecutionPolicy&& policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2, BinaryPredicate p ); | (8) | (since C++17) |
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)
.
operator==
.p
.policy
. This overload only participates in overload resolution if std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>
is truefirst1, 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. |
p | - | 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:
While the signature does not need to have |
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. |
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 behavior is undefined if the second range is shorter than the first range. | (until C++14) |
If no mismatches are found when the comparison reaches last1 or last2 , whichever happens first, the pair holds the end iterator and the corresponding iterator from the other range. | (since C++14) |
last1
- first1
applications of operator==
or the predicate p
last1
- first1
, last2
- first2
) applications of operator==
or the predicate p
.The overloads with a template parameter named ExecutionPolicy
report errors as follows:
ExecutionPolicy
is one of the standard policies, std::terminate
is called. For any other ExecutionPolicy
, the behavior is implementation-defined. std::bad_alloc
is thrown. 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, BinaryPredicate 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); } |
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 reverse order (possibly overlapping).
#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.rbegin()).first); } int main() { std::cout << mirror_ends("abXYZba") << '\n' << mirror_ends("abca") << '\n' << mirror_ends("aba") << '\n'; }
Output:
ab a aba
determines if two sets of elements are the same (function template) |
|
(C++11) | finds the first element satisfying specific criteria (function template) |
returns true if one range is lexicographically less than another (function template) |
|
searches for a range of elements (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/algorithm/mismatch