函数模板
<algorithm>

std::equal

相等 (1)
template <class InputIterator1, class InputIterator2>  bool equal (InputIterator1 first1, InputIterator1 last1,              InputIterator2 first2);
谓词 (2)
template <class InputIterator1, class InputIterator2, class BinaryPredicate>  bool equal (InputIterator1 first1, InputIterator1 last1,              InputIterator2 first2, BinaryPredicate pred);
测试两个范围内的元素是否相等
比较范围 [first1,last1) 中的元素与以 first2 开头的范围内的元素,如果两个范围内的所有元素都匹配,则返回 true

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

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
10
template <class InputIterator1, class InputIterator2>
  bool equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
{
  while (first1!=last1) {
    if (!(*first1 == *first2))   // or: if (!pred(*first1,*first2)), for version 2
      return false;
    ++first1; ++first2;
  }
  return true;
}

参数

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

返回值

如果范围 [first1,last1) 中的所有元素都与以 first2 开头的范围中的元素相等,则返回 true,否则返回 false

示例

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
// equal algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::equal
#include <vector>       // std::vector

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

int main () {
  int myints[] = {20,40,60,80,100};               //   myints: 20 40 60 80 100
  std::vector<int>myvector (myints,myints+5);     // myvector: 20 40 60 80 100

  // using default comparison:
  if ( std::equal (myvector.begin(), myvector.end(), myints) )
    std::cout << "The contents of both sequences are equal.\n";
  else
    std::cout << "The contents of both sequences differ.\n";

  myvector[3]=81;                                 // myvector: 20 40 60 81 100

  // using predicate comparison:
  if ( std::equal (myvector.begin(), myvector.end(), myints, mypredicate) )
    std::cout << "The contents of both sequences are equal.\n";
  else
    std::cout << "The contents of both sequences differ.\n";

  return 0;
}

输出
The contents of both sequences are equal.
The contents of both sequence differ.


复杂度

线性时间,最多与 first1last1 之间的 距离 相关:比较元素直到找到不匹配项。

数据竞争

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

异常

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

另见