Constrained algorithms and algorithms on ranges(C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constrained algorithms, e.g.ranges::copy,ranges::sort, ... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution policies(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operations on uninitialized memory | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header <algorithm> | ||
template<class InputIt1,class InputIt2> std::pair<InputIt1, InputIt2> | (1) | (constexpr since C++20) |
template<class ExecutionPolicy,class ForwardIt1,class ForwardIt2> std::pair<ForwardIt1, ForwardIt2> | (2) | (since C++17) |
template<class InputIt1,class InputIt2,class BinaryPred> std::pair<InputIt1, InputIt2> | (3) | (constexpr since C++20) |
template<class ExecutionPolicy, class ForwardIt1,class ForwardIt2,class BinaryPred> | (4) | (since C++17) |
template<class InputIt1,class InputIt2> std::pair<InputIt1, InputIt2> | (5) | (since C++14) (constexpr since C++20) |
template<class ExecutionPolicy,class ForwardIt1,class ForwardIt2> std::pair<ForwardIt1, ForwardIt2> | (6) | (since C++17) |
template<class InputIt1,class InputIt2,class BinaryPred> std::pair<InputIt1, InputIt2> | (7) | (since C++14) (constexpr since C++20) |
template<class ExecutionPolicy, class ForwardIt1,class ForwardIt2,class BinaryPred> | (8) | (since C++17) |
Returns a pair of iterators to the first mismatching of elements from[
first1,
last1)
and a range starting fromfirst2:
[
first2,
last2)
.std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue. | (until C++20) |
std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue. | (since C++20) |
Contents |
first1, last1 | - | the pair of iterators defining the firstrange of elements to compare |
first2, last2 | - | the pair of iterators defining the secondrange of elements to compare |
policy | - | theexecution policy to use |
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: bool pred(const Type1&a,const Type2&b); While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) |
Type requirements | ||
-InputIt1 must meet the requirements ofLegacyInputIterator. | ||
-InputIt2 must meet the requirements ofLegacyInputIterator. | ||
-ForwardIt1 must meet the requirements ofLegacyForwardIterator. | ||
-ForwardIt2 must meet the requirements ofLegacyForwardIterator. | ||
-BinaryPred must meet the requirements ofBinaryPredicate. |
std::pair with iterators to the first two non-equal elements.
Iflast1 is reached, the second iterator in the pair is thestd::distance(first1, last1)th iterator afterfirst2.
For overloads(5-8), iflast2 is reached, the first iterator in the pair is thestd::distance(first2, last2)th iterator afterfirst1.
Given\(\scriptsize N_1\)N1 asstd::distance(first1, last1) and\(\scriptsize N_2\)N2 asstd::distance(first2, last2):
The overloads with a template parameter namedExecutionPolicy
report errors as follows:
ExecutionPolicy
is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy
, the behavior is implementation-defined.mismatch (1) |
---|
template<class InputIt1,class InputIt2>std::pair<InputIt1, InputIt2> mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2){while(first1!= last1&&*first1==*first2)++first1,++first2; returnstd::make_pair(first1, first2);} |
mismatch (3) |
template<class InputIt1,class InputIt2,class BinaryPred>std::pair<InputIt1, InputIt2> mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPred p){while(first1!= last1&& p(*first1,*first2))++first1,++first2; returnstd::make_pair(first1, first2);} |
mismatch (5) |
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; returnstd::make_pair(first1, first2);} |
mismatch (7) |
template<class InputIt1,class InputIt2,class BinaryPred>std::pair<InputIt1, InputIt2> mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPred p){while(first1!= last1&& first2!= last2&& p(*first1,*first2))++first1,++first2; returnstd::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 <algorithm>#include <iostream>#include <string> std::string mirror_ends(conststd::string& in){returnstd::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:
abaaba
determines if two sets of elements are the same (function template)[edit] | |
(C++11) | finds the first element satisfying specific criteria (function template)[edit] |
returnstrue if one range is lexicographically less than another (function template)[edit] | |
searches for the first occurrence of a range of elements (function template)[edit] | |
(C++20) | finds the first position where two ranges differ (algorithm function object)[edit] |