equal()作为STL函数

语法:bool equal(

InputIterator1 first1,

InputIterator1 last1,

InputIterator2 first2);

哪里,InputIterator1 first =迭代器,开始第一个序列范围

InputIterator1 last1 =迭代器到第一个序列范围的结尾

InputIterator2 first2 =迭代器开始第二个序列范围

返回类型: boolTrue-如果两个范围内的所有元素都相同

False-如果两个范围内的所有元素都不相同

上面的语法用于使用标准==运算符比较元素。

我们还可以定义用户定义的二进制谓词(而不是'==')来检查是否相等。用户定义的二进制谓词的语法如下:

(二元谓词是一个带有两个参数并仅返回true或false的函数。)bool equal(

InputIterator1 first1,

InputIterator1 last1,

InputIterator2 first2,

BinaryPredicate pred);

使用上述语法,可以通过谓词检查相应范围的元素。

因此,我们发现第二个范围的最后一个迭代器没有共享,因为它只会比较范围1相同数量的元素。而且,它将顺序检查,这意味着[1、3、5]和[5] ,, 3,1]不一样。因此,两个范围的顺序必须相同。

1)使用默认的'=='/'!='运算符#include

using namespace std;

int main(){

vector arr1{ 3, 2, 1, 4, 5, 6, 7 };

vector arr2{ 3, 2, 1, 4, 5 };

if (equal(arr1.begin(), arr1.begin() + 5, arr2.begin())) {

cout <

}

else

cout <

vector arr3{ 1, 2, 3, 4, 5, 6, 7 };

vector arr4{ 1, 2, 3, 4, 5 };

if (equal(arr3.begin(), arr3.end(), arr4.begin())) {

cout <

}

else

cout <

return 0;

}

输出:both ranges are exactly equal

both ranges are not exactly equal

在上面的程序中,我们检查了两种情况,并使用了默认的比较器。在第一种情况下,

第一个范围是arr1.begin()到arr1.begin()+ 5,即arr1的仅前五个元素。第二个范围从arr2.begin()开始,它将仅从range2的开始检查前五个元素。由于两者相同,因此是匹配项。

[3,2,1,4,5]

在第二种情况下,由于我们使用了arr3的总范围,因此这是不匹配的。

2)使用用户定义的比较器功能

在这里,我们以一个用例为例,我们有两个向量用于学生详细信息,每个向量有五个学生。通过使用用户定义的预测,我们将检查两个列表是否相等。如果每个学生的详细信息都匹配,则两个列表都相等。要使学生详细信息匹配,所有详细信息(名次,姓名,分数)必须相同。#include

using namespace std;

class student {

int score;

int roll;

string name;

public:    student()

{

score = 0;

roll = 0;

name = "";

}

student(int sc, int ro, string nm)

{

score = sc;

roll = ro;

name = nm;

}

int get_score()

{

return score;

}

int get_roll()

{

return roll;

}

string get_name()

{

return name;

}

};

bool pred(student a, student b)

{

//如果所有细节都相同,则返回true,否则返回false-

if (a.get_name() == b.get_name() && a.get_score() == b.get_score() && a.get_roll() == b.get_roll())

return true;

return false;

}

int main(){

//第一个列表

vector arr1(5);

//第一名学生

arr1[0] = student(80, 5, "XYZ"); //卷5,标记80-

//第二名学生

arr1[1] = student(70, 10, "INC"); //卷10,标记70-

//第三学生

arr1[2] = student(85, 7, "HYU"); //卷7,标记85-

//第四名学生

arr1[3] = student(83, 1, "EFG"); //卷1,标记83-

//第五名学生

arr1[4] = student(81, 11, "ABC"); //卷11,标记81-

//第二个列表

vector arr2(5);

//第一名学生

arr2[0] = student(80, 5, "XYZ"); //卷5,标记80-

//第二名学生

arr2[1] = student(70, 10, "INC"); //卷10,标记70-

//第三学生

arr2[2] = student(85, 7, "HYU"); //卷7,标记85-

//第四名学生

arr2[3] = student(83, 1, "EFG"); //卷1,标记83-

//第五名学生

arr2[4] = student(81, 11, "ABC"); //卷11,标记81-

//查找检查两个列表是否相等

//基于用户定义的谓词

if (equal(arr1.begin(), arr1.end(), arr2.begin(), pred))

cout <

else

cout <

//第三列表

vector arr3(5);

//第一名学生

arr3[0] = student(89, 5, "PVR"); //卷5,标记89-

//第二名学生

arr3[1] = student(70, 10, "INC"); //卷10,标记70-

//第三学生

arr3[2] = student(85, 7, "HYU"); //卷7,标记85-

//第四名学生

arr3[3] = student(83, 1, "EFG"); //卷1,标记83-

//第五名学生

arr3[4] = student(81, 11, "ABC"); //卷11,标记81-

//查找检查两个列表是否相等 based

//在用户定义的谓词上

if (equal(arr1.begin(), arr1.end(), arr3.begin(), pred))

cout <

else

cout <

return 0;

}

输出:Both lists arr1,arr2 are equal

Both lists arr1,arr3 are not equal

在这里,我们首先创建了两个具有相同元素的列表。由于两个列表的大小相等,因此我们发现等于返回true。对于第二种情况,我们更改了arr3中的元素以使其不相等,并且在输出中反映出相同的内容。在我们用户定义的谓词中,如果所有细节都匹配两个学生,我们将返回true。

因此,在本文中,您看到了我们可以使用equal来检查两个范围是否相等的效率。这种方法的应用可以是检查一个数组是否是另一个数组的子数组。

C语言equal(),C ++中的std :: equal()相关推荐

  1. 【Java学习记录】九 Java中的“==”和equal

    "==" "=="代表比较双方是否相同.如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象.相同为true,不相同为false:基本数据类型 ...

  2. ARM汇编和C语言混合编程中数组的数组的操作

    ARM汇编和C语言混合编程中数组的数组的操作 此示例描述a数组中的元素累加的结果,c和b交换的实例: 代码块 例如: #include <stdio.h>int main (int arg ...

  3. C语言将向量中的所有0移至末尾(附完整源码)

    C语言将向量中的所有0移至末尾 将向量中的所有0移至末尾 C语言将向量中的所有0移至末尾完整源码(定义,实现,main函数测试) 将向量中的所有0移至末尾 example: intout vec = ...

  4. C语言在数组中找到最大的元素(附完整源码)

    C语言在数组中找到最大的元素 C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) #include <io ...

  5. php union用法,C++_C语言、C++中的union用法总结,开始的话 已经好长时间没有 - phpStudy...

    内存对齐的问题了).而对于union来说,在谭浩强的<C语言程序设计>中这么说:union变量所占用的内存长度等于最长的成员的内存长度.很显然,这是不对的,对于union所占用的内存大小, ...

  6. union c语言什么意思,C语言、C++中的union用法总结(包懂)

    开始的话 已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台.忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市.大家都在纠结这 ...

  7. 【C++】一文搞懂C++中的std::是什么

    1.C++中的std::是什么? std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定. 标准库在名字空 ...

  8. 学生成绩管理系统(C语言作业,中英文版)

    学生成绩管理系统(C语言作业,中英文版) 这个是我以前写的学生成绩管理系统,因为是外教讲的C语言,所以作业也是用英文写的.不过注释我用中文解释了一下. 当时我反复debug,写了改,改了写,写了好多个 ...

  9. R语言在散点图中添加lm线性回归公式

    R语言在散点图中添加lm线性回归公式 1. 简单的线性回归 2. 使用ggplot2展示 3. 提取线性回归p值 1. 简单的线性回归 函数自带的例子(R 中键入?lm),lm(y ~ x)回归y=k ...

最新文章

  1. 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]
  2. SwiftUI之深入解析布局如何自定义AlignmentGuides
  3. 《天天数学》连载18:一月十八日
  4. 计算机网络—SR选择重传协议
  5. 使用虚拟环境 virtualenv
  6. matlab cpu序列号,获取cpu序列号 - huhaoren的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. matlab补帧,超清还不够,插帧算法让视频顺滑如丝丨NeurIPS 2019
  8. 苹果手机从企业微信进入小程序下载不了图片
  9. 七升七降调号_乐理知识:降号调的构成及其调号
  10. esp32 io速度_Adafruit HUZZAH32-ESP32Feather的说明
  11. 在Ubuntu 20.04 拆分pdf文档
  12. SPR1: Spring简介
  13. 图片文档扫描矫正处理(手机扫描仪),OCR识别,图片修改库整合
  14. 【zt】克服当众怕羞的心理1
  15. 静态链接之与静态库的链接
  16. thermal啥意思_thermal是什么意思?
  17. 微软认证(dynamic 365)考试
  18. 封神台靶场 kali训练营第二关WP
  19. JPEG图像压缩算法流程详解
  20. 网易有道面经(2013校园招聘杭州站)zz

热门文章

  1. 微信小程序css3动画怎么写,微信小程序动画课程-通过wxss(css)来实现-animation 属性...
  2. python怎么让游戏倒计时_Python如何让倒计时效果的在固定区域刷新
  3. 每日程序C语言25-查找100以内的素数
  4. 橙子云手机华为保修吗_华为云手机引关注!将替代传统手机?华为回应来了
  5. 程序员面试100题之十六:二叉树中两个节点的最近公共父节点
  6. Git Push 免输 用户名和密码
  7. 如何扩展 Azure 资源组中虚拟机的 OS 驱动器
  8. Matlab Tricks(二十九) —— 使用 deal 将多个输入赋值给多个输出
  9. 【转】使IFRAME在iOS设备上支持滚动
  10. 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)