|
<algorithm>
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 pred );
Test whether the elements in two ranges are equal
Compares the elements in the range [first1,last1) with those in the range beginning at first2, and returns true if the elements in both ranges are considered equal.
The elements are compared by either applying the == comparison operator to each pair of corresponding elements, or the template parameter pred (for the second version).
The behavior of this function template is equivalent to:
1 2 3 4 5 6 7 8 9 10 11
|
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 pred version
return false;
++first1; ++first2;
}
return true;
}
|
Parameters
- first1, last1
- Forward iterators to the initial and final positions of the first sequence. The range used is [first1,last1), which contains all the elements between first1 and last1, including the element pointed by first1 but not the element pointed by last1.
- first2
- Forward iterator to the initial position of the second sequence. The comparison includes up to as many elements in this sequence as in the above sequence.
- pred
- Binary predicate taking two elements as argument (one of each of the two sequences), and returning the result of the comparison between them, with true (non-zero) meaning that they are to be considered equal, and false (zero) that they are not-equal. This can either be a pointer to a function or an object whose class overloads operator().
Return value
true if all the elements in the range [first1,last1) compare equal to those of the range starting at first2, and false otherwise.
Example
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
|
// equal algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool mypredicate (int i, int j) {
return (i==j);
}
int main () {
int myints[] = {20,40,60,80,100}; // myints: 20 40 60 80 100
vector<int>myvector (myints,myints+5); // myvector: 20 40 60 80 100
// using default comparison:
if (equal (myvector.begin(), myvector.end(), myints))
cout << "The contents of both sequences are equal." << endl;
else
cout << "The contents of both sequences differ." << endl;
myvector[3]=81; // myvector: 20 40 60 81 100
// using predicate comparison:
if (equal (myvector.begin(), myvector.end(), myints, mypredicate))
cout << "The contents of both sequences are equal." << endl;
else
cout << "The contents of both sequences differ." << endl;
return 0;
}
|
Output:
The contents of both sequences are equal.
The contents of both sequence differ.
|
Complexity
At most, performs as many comparisons or applications of pred as the number of elements in the range [first1,last1).
See also
mismatch | Return first position where two ranges differ (function template) |
find_end | Find last subsequence in range (function template) |
search | Find subsequence in range (function template) |
|