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
. 目录 |
[编辑] 参数
first1, last1 | - | |
first2 | - | |
p | - | 若元素应被当做相等则返回 true 的二元谓词。 谓词函数的签名应等价于如下者: bool pred(const Type1 &a, const Type2 &b); 签名不必拥有 const & ,但函数必须不修改传递给它的对象。 |
类型要求 | ||
-InputIt1 必须满足 InputIterator 的要求。
| ||
-InputIt2 必须满足 InputIterator 的要求。
| ||
-OutputIt 必须满足 OutputIterator 的要求。
|
[编辑] 返回值
std::pair与迭代器的第一两个非等同的元件,或者,如果没有发现的不同的元素,对
last1
和第二范围对应的迭代器从.[编辑] 复杂度
在最
last1
- first1
谓词的应用[编辑] 可能的实现
版本一 |
---|
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); } |
[编辑] 示例
这项计划确定的子串,同时发现给定的字符串,在开始的时候,在它的最末端,以相反的顺序(可能有重叠)
运行此代码
#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 (函数模板) | |
查找一个元素区间 (函数模板) |