描述:
       比较两个容器中的元素是否完全相等。

定义:

template< class InputIt1, class InputIt2 >
bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2 );template< class InputIt1, class InputIt2 >
constexpr bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2 );
template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, BinaryPredicate p );template< class InputIt1, class InputIt2, class BinaryPredicate >
constexpr bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, BinaryPredicate p );
template< class InputIt1, class InputIt2 >
bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2 );template< class InputIt1, class InputIt2 >
constexpr bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2 );
template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2,BinaryPredicate p );template< class InputIt1, class InputIt2, class BinaryPredicate >
constexpr bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2,BinaryPredicate p );

可能的实现:

template<class InputIt1, class InputIt2>
bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2)
{for (; first1 != last1; ++first1, ++first2) {if (!(*first1 == *first2)) {return false;}}return true;
}
template<class InputIt1, class InputIt2, class BinaryPredicate>
bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p)
{for (; first1 != last1; ++first1, ++first2) {if (!p(*first1, *first2)) {return false;}}return true;
}
template<class InputIt1, class InputIt2>
bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2 )
{if (distance(first1,last1) != distance(first2,last2)return false;for (; first1 != last1, first2 != last2; ++first1, ++first2) {if (!(*first1 == *first2)) {return false;}}return true;
}
template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2,BinaryPredicate p )
{if (distance(first1,last1) != distance(first2,last2)return false;for (; first1 != last1, first2 != last2; ++first1, ++first2) {if (!p(*first1, *first2)) {return false;}}return true;
}

参数:
       first1, last1 - 进行比较的第一个范围
       first2, last2 - 进行比较的第二个范围
       p - 若元素应被当做相等则返回 ​true 的二元谓词。

返回值:
       如果范围 [first1, last1) 的长度不等于范围 [first2, last2) 的长度则返回 false 。
       如果两个范围内的元素都相等,则返回 true 。否则返回 false 。

示例:

#include <iostream>
#include <vector>int main()
{std::vector<int> vec1;vec1.push_back(1);vec1.push_back(2);vec1.push_back(3);std::vector<double> vec2;vec2.push_back(1);vec2.push_back(2);vec2.push_back(3);//注意://1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等//2、容器2的元素必须大于等于3bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin());std::cout << bRt << std::endl;//1
}
#include <iostream>
#include <vector>struct SData
{int m_nData;SData(int nData) {m_nData = nData;}
};int main()
{std::vector<SData> vec1;vec1.push_back(SData(1));vec1.push_back(SData(2));vec1.push_back(SData(3));std::vector<SData> vec2;vec2.push_back(SData(1));vec2.push_back(SData(2));vec2.push_back(SData(1));//注意://1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等//2、容器2的元素必须大于等于3bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(),[](const SData& obj1, const SData& obj2) {return obj1.m_nData == obj2.m_nData; });std::cout << bRt << std::endl;//1
}
#include <iostream>
#include <vector>int main()
{std::vector<int> vec1;vec1.push_back(1);vec1.push_back(2);vec1.push_back(3);std::vector<double> vec2;vec2.push_back(1);vec2.push_back(2);vec2.push_back(3);//注意://1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等//2、容器2的元素必须大于等于3bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(),vec2.end());std::cout << bRt << std::endl;//1
}
#include <iostream>
#include <vector>struct SData
{int m_nData;SData(int nData) {m_nData = nData;}
};int main()
{std::vector<SData> vec1;vec1.push_back(SData(1));vec1.push_back(SData(2));vec1.push_back(SData(3));std::vector<SData> vec2;vec2.push_back(SData(1));vec2.push_back(SData(2));vec2.push_back(SData(1));//注意://1、比较容器1的3个元素与容器2的三个元素,判断是否完全相等//2、容器2的元素必须大于等于3bool bRt = std::equal(vec1.begin(), vec1.end(), vec2.begin(),vec2.end(),[](const SData& obj1, const SData& obj2) {return obj1.m_nData == obj2.m_nData; });std::cout << bRt << std::endl;//1
}

std::equal 用法相关推荐

  1. boost::hana::equal用法的测试程序

    boost::hana::equal用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::equal用法的测试程序 C++实现代码 #include <boost/han ...

  2. boost::hana::ext::std::vector_tag用法的测试程序

    boost::hana::ext::std::vector_tag用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::ext::std::vector_tag用法的测试程序 ...

  3. std::map用法

    std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map ...

  4. std::tuple、std::tie(可用于结构体大小比较)、std::pair用法

    1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...

  5. 转: std::string用法详解

    原文地址为: 转: std::string用法详解  C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...

  6. 【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法

    [C++]50.浮点数的std::fixed.std::setprecision().std::setw()用法 C++中std::setw()的用法 1. std::fixed() #include ...

  7. 【C++标准库】std::string用法指南源码剖析

    文章目录 1.ASCII码 (1)计算机如何表达字符 2.C 语言中的字符类型 char (1)思想:char 即整数 (3)C 语言帮手函数 (4)C语言中的字符串 (4)C 语言转义符 3.C++ ...

  8. std::function用法详解

    std::function用法详解 代码在:VCCommon/functionDemo std::function 简介 类模板 std :: function 是一个通用的多态函数包装器. std ...

  9. C++/C++11中std::string用法汇总

    C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...

  10. C++/C++11中std::set用法汇总

    一个容器就是一些特定类型对象的集合.顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应.与之相对 ...

最新文章

  1. Spring MVC常用注解说明
  2. c语言指针尚观嵌入式,C语言-指针
  3. php如何判断当前的操作系统是linux还是windows
  4. 专栏-美国人口和都市区
  5. 读取xml文件基于xpath
  6. java正则表达式匹配数字范围_在java中怎么利用正则表达式匹配数字
  7. 微信 小程序组件 分享按钮
  8. 云计算odps使用笔记(一)环境搭建
  9. github视频教程-03 如何使用github上pull-request功能(VS2013)
  10. Google 因果推断的CausalImpact 贝叶斯结构时间序列模型(二十二)
  11. 1055 集体照 (25 分)
  12. 不容忽视的细节——线面积分中的奇点
  13. Photoshop入门教程:画笔工具轻松打造轻纱效果
  14. 拉格朗日乘子法——从单约束到多约束的直观翻译
  15. 文件上传黑名单和白名单校验
  16. 致所有初学者--助力所有ERP初学者!!!
  17. urovo手持终重启_手持终端设备常见问题及维修方法
  18. 主页改index.php,如何更改首页默认index.php改成index.html
  19. 《孙子初问世》--游戏策划书
  20. flex 换行每行子元素对齐

热门文章

  1. 海南大学研究生计算机分数线,海南大学研究生录取分数线
  2. python 实现微信自动回复(自动聊天)
  3. T270731 中奖
  4. Lab3:自行车码表
  5. 关于Google大陆手机号不能验证的问题
  6. Ubuntu 16.04 安装wine-qq 7.8 并解决不能输入中文问题
  7. 激活Windows系统的方式
  8. 分享几个国内外安全专家常用的漏洞库平台
  9. 用 mkcert 搭建本地开发受信 HTTPS 证书环境
  10. cortana 无法使用_如何在Windows 10中将Cortana与本地用户帐户一起使用