std::mismatch
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <algorithm> 中定义
|
||
template< class InputIt1, class InputIt2 > std::pair<InputIt1,InputIt2> |
(1) | |
template< class InputIt1, class InputIt2, class BinaryPredicate > std::pair<InputIt1,InputIt2> |
(2) | |
返回第一个不匹配,对两个范围中的元素:一个
[first1, last1)
和另一个开始在first2
的定义。 operator==
的第一个版本的功能使用比较的元素,第二个版本使用给定的二元谓词p
. 原文:
Returns the first mismatching pair of elements from two ranges: one defined by
[first1, last1)
and another starting at first2
. The first version of the function uses operator==
to compare the elements, the second version uses the given binary predicate p
. 目录 |
[编辑] 参数
first1, last1 | - | 第一范围内的要素
|
first2 | - | 的元素的第二范围的开头
原文: the beginning of the second range of the elements |
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); The signature does not need to have const &, but the function must not modify the objects passed to it. |
类型要求 | ||
-InputIt1 必须满足 InputIterator 的要求。
| ||
-InputIt2 必须满足 InputIterator 的要求。
| ||
-OutputIt 必须满足 OutputIterator 的要求。
|
[编辑] 返回值
std::pair与迭代器的第一两个非等同的元件,或者,如果没有发现的不同的元素,对
last1
和第二范围对应的迭代器从.原文:
std::pair with iterators to the first two non-equivalent elements, or, if no different elements found, pair with
last1
and the corresponding iterator from the second range.[编辑] 复杂度
在最
last1
- first1
谓词的应用原文:
At most
last1
- first1
applications of the predicate[编辑] 可能的实现
版本一 |
---|
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); } |
版本二 |
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); } |
[编辑] 示例
这项计划确定的子串,同时发现给定的字符串,在开始的时候,在它的最末端,以相反的顺序(可能有重叠)
原文:
This program determines the 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'; }
输出:
ab a aba
[编辑] 另请参阅
确定两个元素集合是否是相同的 (函数模板) | |
(C++11) |
查找满足特定条件的第一个元素 (函数模板) |
如果一个区间按字典顺序小于另一个区间,返回true (函数模板) | |
查找一个元素区间 (函数模板) |