equal比较两个容器是否相等
std::equal
函数模板
将范围[first1,last1)中的元素与从first2开始的范围中的元素进行比较,如果两个范围中的所有元素匹配,则返回true。
template <class InputIterator1, class InputIterator2> bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); //迭代器first1,last1,first2 //[first1,last1)中的元素和first2中[first1,last1)个元素做比较 template <class InputIterator1, class InputIterator2, class BinaryPredicate> bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred); //这里的pred是一个返回值可以转换为布尔类型的函数,接受两个元素作为参数(两个序列各一个,顺序相同),并返回一个可转换为bool的值。 //返回的值表示在这个函数的上下文中,这些元素是否被认为是匹配的。 //该函数不应修改其任何参数。 //这可以是一个函数指针,也可以是一个函数对象。
参数
first1,last1,first2:
first1,last1,first2都是迭代器[first1,last1)中的元素和first2中[first1,last1)个数量的元素做比较
pred:
是一个返回值可以转换为布尔类型的函数,接受两个元素作为参数(两个序列各一个,顺序相同),
并返回一个可转换为bool的值。
案例
#include <iostream> //for std::cout std::endl
#include <vector> //for std::vector
#include <algorithm> //for std::equal
template<typename T>
bool predicate(T i, T j);
int main() {
using namespace std;
int intArr1[]{ 10,20,30,40,50 };//定义并初始化数组intArr1
vector<int>v1(intArr1, intArr1 + 5);//利用intArr1初始化vector<int> v1
vector<int>v2{ 1,2,3,4,5 };//定义并初始化vector<int> v2
if (equal(intArr1, intArr1 + 5,v1.begin())) //使用三个参数的构造函数比较[intArr1,intArr1 + 5)的元素是否和v1.begin()开始数量和前者相同的元素是否相同
{
cout << "他们相等(三参数的构造函数)" << endl;
}
else {
cout << "他们不相等(三参数的构造函数)" << endl;
}
if (equal(intArr1, intArr1 + 5, v2.begin(), predicate<int>)) //使用四个参数的构造函数比较[intArr1, intArr1 + 5)的元素是否和v2.begin()开始数量和前者相同的元素是否相同,使用predicate<int>函数比较
{
cout << "他们相等(四参数的构造函数)" << endl;
}
else {
cout << "他们不相等(四参数的构造函数)" << endl;
}
}
template<typename T>
bool predicate(T i, T j) {
return (i == j);
}
定义并初始化了数组intArr1:10,20,30,40,50。
用intArr1里的[intArr1, intArr1 + 5)来初始化vector<int> v2(数组名称就是指向数组第一个元素的指针)
定了并初始化了vector<int> v2 :1,2,3,4,5
执行的操作
使用了三个参数的equal构造函数判断intArr1和v1是否相等
使用了四个参数的equal构造函数判断intArr1和v2是否相等

浙公网安备 33010602011771号