equal和mismatch算法的功能是比较容器中的两个区间内的元素。这两个算法各有3个参数first1,last1和first2.如果对 于区间[first1,last1)内所有的first1+i,first1+i和first2所在位置处的元素都相等,则equal算法返回真,否则返 回假。mismatch算法的返回值是由两个迭代器first1+i和first2+i组成的一个pair,表示第1对不相等的元素的位置。如果没有找到 不相等的元素,则返回last1和first2+(last1-first1)。因此,语句equal(first1,last1,first2)和mismatch(first1,last1,first2).first==last1是等价的.

// Illustrating the generic equal and mismatch algorithms #include <iostream> #include <cassert> #include <algorithm> #include <string> #include <list> #include <deque> #include <vector> using namespace std;  int main() {   cout << "Illustrating the generic equal "        << "and mismatch algorithms." << endl;   list<string> driver_list;   vector<string> vec;   deque<string> deq;    driver_list.insert(driver_list.end(), "Clark");   driver_list.insert(driver_list.end(), "Rindt");   driver_list.insert(driver_list.end(), "Senna");    vec.insert(vec.end(), "Clark");   vec.insert(vec.end(), "Rindt");   vec.insert(vec.end(), "Senna");   vec.insert(vec.end(), "Berger");    deq.insert(deq.end(), "Clark");   deq.insert(deq.end(), "Berger");    // Show that driver_list and the first 3 elements of   // vec are equal in all corresponding positions:   assert (equal(driver_list.begin(), driver_list.end(),                 vec.begin()));    // Show that deq and the first 2 elements of driver_list   // are not equal in all corresponding positions:   assert (!equal(deq.begin(), deq.end(),                  driver_list.begin()));    // Find the corresponding positions in deq and driver_list   // at which unequal elements first occur:   pair<deque<string>::iterator, list<string>::iterator>     pair1 = mismatch(deq.begin(), deq.end(),                      driver_list.begin());    if (pair1.first != deq.end())     cout << "First disagreement in deq and driver_list:\n  "          << *(pair1.first) << " and " << *(pair1.second)          << endl;   return 0; }

equal算法类似于mismatch,equal算法也是逐一比较两个序列的元素是否相等,只是equal函数的返回值为bool值 true/false,不是返回迭代器值。它有如下两个原型,如果迭代器区间[first1,last1)和迭代器区间[first2, first2+(last1 - first1))上的元素相等(或者满足二元谓词判断条件binary_pred) ,返回true,否则返回false。

  函数原型:

template<class InputIterator1, class InputIterator2>    bool equal(       InputIterator1 _First1,        InputIterator1 _Last1,        InputIterator2 _First2       ); template<class InputIterator1, class InputIterator2, class BinaryPredicate>    bool equal(       InputIterator1 _First1,        InputIterator1 _Last1,        InputIterator2 _First2,        BinaryPredicate _Comp       );

example:

利用二元谓词判断条件absEqual,判断出两个vector向量容器的元素均绝对值相等。

#include <algorithm>   #include <vector>   #include <iostream>      using namespace std;      bool absEqual(int a, int b)   {       return (a == abs(b) || b == abs(a)) ? true : false;   }      int main()   {       vector<int> ivect1(5);       vector<int> ivect2(5);          for (vector<int>::size_type i = 0; i < ivect1.size(); ++i)       {           ivect1[i] = i;           ivect2[i] = (-1) * i;       }       if ( equal( ivect1.begin(), ivect1.end(), ivect2.begin(), absEqual ) )       {           cout << "ivect1 和 ivect2 元素的绝对值完全相等" << endl;       }        else       {           cout << "ivect1 和 ivect2 元素的绝对值不完全相等" << endl;       }       return 0;   }