函数模板
<algorithm>

std::mismatch

相等 (1)
template <class InputIterator1, class InputIterator2>  pair<InputIterator1, InputIterator2>    mismatch (InputIterator1 first1, InputIterator1 last1,              InputIterator2 first2);
谓词 (2)
template <class InputIterator1, class InputIterator2, class BinaryPredicate>  pair<InputIterator1, InputIterator2>    mismatch (InputIterator1 first1, InputIterator1 last1,              InputIterator2 first2, BinaryPredicate pred);
返回两个范围不匹配的第一个位置
将范围 [first1,last1)中的元素与从first2开始的范围中的元素进行比较,并返回两个序列中第一个不匹配的元素。

元素使用operator==(或版本(2)中的pred)进行比较。

该函数返回一个指向两个序列中第一个不匹配元素的pair迭代器。

此函数模板的行为等同于
1
2
3
4
5
6
7
8
template <class InputIterator1, class InputIterator2>
  pair<InputIterator1, InputIterator2>
    mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
{
  while ( (first1!=last1) && (*first1==*first2) )  // or: pred(*first1,*first2), for version 2
  { ++first1; ++first2; }
  return std::make_pair(first1,first2);
}

参数

first1, last1
输入迭代器,指向第一个序列的起始和结束位置。使用的范围是[first1,last1),它包含first1last1之间的所有元素,包括first1指向的元素,但不包括last1指向的元素。
first2
输入迭代器,指向第二个序列的起始位置。该函数最多可以访问与范围[first1,last1)相同数量的元素。
pred
二元函数,接受两个元素作为参数(分别来自两个序列中的一个,顺序相同),并返回一个可转换为bool的值。返回值表示在函数上下文中元素是否被视为匹配。
该函数不得修改其任何参数。
这可以是函数指针或函数对象。

返回值

一个pair,其成员firstsecond指向两个序列中第一个互不相等的元素。
如果两个序列中比较的元素都匹配,则函数返回一个pair,其中first设置为last1second设置为第二个序列中相同相对位置的元素。
如果没有匹配项,则返回make_pair(first1,first2)

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// mismatch algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::mismatch
#include <vector>       // std::vector
#include <utility>      // std::pair

bool mypredicate (int i, int j) {
  return (i==j);
}

int main () {
  std::vector<int> myvector;
  for (int i=1; i<6; i++) myvector.push_back (i*10); // myvector: 10 20 30 40 50

  int myints[] = {10,20,80,320,1024};                //   myints: 10 20 80 320 1024

  std::pair<std::vector<int>::iterator,int*> mypair;

  // using default comparison:
  mypair = std::mismatch (myvector.begin(), myvector.end(), myints);
  std::cout << "First mismatching elements: " << *mypair.first;
  std::cout << " and " << *mypair.second << '\n';

  ++mypair.first; ++mypair.second;

  // using predicate comparison:
  mypair = std::mismatch (mypair.first, myvector.end(), mypair.second, mypredicate);
  std::cout << "Second mismatching elements: " << *mypair.first;
  std::cout << " and " << *mypair.second << '\n';

  return 0;
}

输出
First mismatching elements: 30 and 80
Second mismatching elements: 40 and 320


复杂度

最多线性于first1last1之间的距离:比较元素直到找到不匹配项。

数据竞争

两个范围中的一些(或全部)对象被访问(最多一次)。

异常

如果任何元素比较(或pred)抛出异常,或者任何迭代器操作抛出异常,则抛出异常。
请注意,无效的参数会导致 *未定义行为*。

另见