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是否相等

 

posted @ 2023-04-01 12:46  EF果果  阅读(130)  评论(0)    收藏  举报