博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ STL算法系列5---equal() , mismatch()
阅读量:6463 次
发布时间:2019-06-23

本文共 3303 字,大约阅读时间需要 11 分钟。

equal和mismatch算法的功能是比较容器中的两个区间内的元素。这两个算法各有3个参数first1,last1和first2.如果对 于区间[first1,last1)内所有的first1+i,first1+i和first2所在位置处的元素都相等,则equal算法返回真,否则返 回假。mismatch算法的返回值是由两个迭代器first1+i和first2+i组成的一个pair,表示第1对不相等的元素的位置。如果没有找到 不相等的元素,则返回last1和first2+(last1-first1)。因此,语句equal(first1,last1,first2)和mismatch(first1,last1,first2).first==last1是等价的.

1 // Illustrating the generic equal and mismatch algorithms 2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std;10 11 int main()12 {13 cout << "Illustrating the generic equal "14 << "and mismatch algorithms." << endl;15 list
driver_list;16 vector
vec;17 deque
deq;18 19 driver_list.insert(driver_list.end(), "Clark");20 driver_list.insert(driver_list.end(), "Rindt");21 driver_list.insert(driver_list.end(), "Senna");22 23 vec.insert(vec.end(), "Clark");24 vec.insert(vec.end(), "Rindt");25 vec.insert(vec.end(), "Senna");26 vec.insert(vec.end(), "Berger");27 28 deq.insert(deq.end(), "Clark");29 deq.insert(deq.end(), "Berger");30 31 // Show that driver_list and the first 3 elements of32 // vec are equal in all corresponding positions:33 assert (equal(driver_list.begin(), driver_list.end(),34 vec.begin()));35 36 // Show that deq and the first 2 elements of driver_list37 // are not equal in all corresponding positions:38 assert (!equal(deq.begin(), deq.end(),39 driver_list.begin()));40 41 // Find the corresponding positions in deq and driver_list42 // at which unequal elements first occur:43 pair
::iterator, list
::iterator>44 pair1 = mismatch(deq.begin(), deq.end(),45 driver_list.begin());46 47 if (pair1.first != deq.end())48 cout << "First disagreement in deq and driver_list:\n "49 << *(pair1.first) << " and " << *(pair1.second)50 << endl;51 return 0;52 }

 

equal算法类似于mismatch,equal算法也是逐一比较两个序列的元素是否相等,只是equal函数的返回值为bool值 true/false,不是返回迭代器值。它有如下两个原型,如果迭代器区间[first1,last1)和迭代器区间[first2, first2+(last1 - first1))上的元素相等(或者满足二元谓词判断条件binary_pred) ,返回true,否则返回false。

  函数原型:

1 template
2 bool equal( 3 InputIterator1 _First1, 4 InputIterator1 _Last1, 5 InputIterator2 _First2 6 ); 7 template
8 bool equal( 9 InputIterator1 _First1, 10 InputIterator1 _Last1, 11 InputIterator2 _First2, 12 BinaryPredicate _Comp13 );14

example:

利用二元谓词判断条件absEqual,判断出两个vector向量容器的元素均绝对值相等。

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 bool absEqual(int a, int b) 8 { 9 return (a == abs(b) || b == abs(a)) ? true : false; 10 } 11 12 int main() 13 { 14 vector
ivect1(5); 15 vector
ivect2(5); 16 17 for (vector
::size_type i = 0; i < ivect1.size(); ++i) 18 { 19 ivect1[i] = i; 20 ivect2[i] = (-1) * i; 21 } 22 if ( equal( ivect1.begin(), ivect1.end(), ivect2.begin(), absEqual ) ) 23 { 24 cout << "ivect1 和 ivect2 元素的绝对值完全相等" << endl; 25 } 26 else 27 { 28 cout << "ivect1 和 ivect2 元素的绝对值不完全相等" << endl; 29 } 30 return 0; 31 }

 

本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3264844.html,如需转载请自行联系原作者

你可能感兴趣的文章
Java基本语法-----java变量
查看>>
GPS导航订餐的APP开发的前景和范围
查看>>
实验 5 类和对象-3
查看>>
day2: python3.5学习——逻辑判断
查看>>
ping的高级用法,发送超大数据包(只做交流学习用)
查看>>
Centos 中使用 FTP 命令时出现“-bash: ftp: command not found”
查看>>
1)②爬取光明网部分旅游新闻
查看>>
绝对有效的 ubuntu 12.xx 下 apache2 + svn 安装和配置方法
查看>>
Hibernate核心配置文件
查看>>
[转]Objective-C Literals, part 2
查看>>
学习spring第一天
查看>>
set global slow_query_log引起的MySQL死锁
查看>>
从veth看虚拟网络设备的qdisc
查看>>
js监听某个元素高度变化来改变父级iframe的高度
查看>>
C#实现多线程的方式:使用Parallel类
查看>>
常用整型变量的最大取值范围
查看>>
openvas在centos下用yum安装笔记
查看>>
为iptables增加layer7补丁(Linux2.6.25内核)
查看>>
真当程序猿眼中只有美女和高薪?
查看>>
XenServer添加物理网卡
查看>>