正在加载小宠物
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝 \n
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

STL-algorithm之equal的用法

看到这个函数, 有些人一定以为这个函数是用来判断两个数据是否相等的,但很遗憾,你被它的外表欺骗了,这个函数比较的是两个范围是否相等(或者符合给定条件), 和大多数函数一样,这个函数有两种形式,一种是带谓词的版本,另一种是不带谓词的版本,它的一种实现方式如下:

template class  InputIterator1,  class InputIterator2 
  bool  equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
{
   while  (first1!=last1) {
     if  (!(*first1 == *first2))    // or: if (!pred(*first1,*first2)), for version 2 谓词版本是if (!pred(*first1,*first2))的 
       return  false;
    ++first1; ++first2;
  }
   return   true;
}

我们可以定义一个string类型的vector容器,里面放入五个字符串,然后定义一个字符串数组,来体验一下这个函数。主要的代码在下面,别忘了加上头文件<algorithm>和<vector>

vector<string> vec_str(5);

vec_str[0] = "Ahe";

vec_str[1] = "Ahell";

vec_str[2] = "Aea";

vec_str[3] = "Ahell";

vec_str[4] = "Ay";

string str[7] = {"she","shell","sea","shell","by","shell","sea"};

cout << equal(vec_str.begin(),vec_str.end(),str)  << ‘ ’; //因为两组字符串不一样,这种情况下返回false

cout << equal(vec_str.begin(),vec_str.end(),str,less<string>()) << endl;//两组字符串中每一个对应的数据,vec_str的都比str的小,所以返回true,至于怎么比较字符串,这个大家可以查一下相应的资料,简单来说就是比较字符的ASCII码。

所以会打印 0 1

如果我们把

vec_str[0] = "Ahe";
vec_str[1] = "Ahell";
vec_str[2] = "Aea";
vec_str[3] = "Ahell";
vec_str[4] = "Ay";

换成下面的样子

vec_str[0] = "she";

vec_str[1] = "shell";

vec_str[2] = "sea";

vec_str[3] = "shell";

vec_str[4] = "by";

那么两组数据就一样了,我们同样用上面的方法输出,我们的结果会就是 1 0

 

参考资料:函数的实现方式截取自cplusplus.com

以上均为个人观点,如果有错误,请大家指正,如果有什么地方没有说明白也可以在下面留言。

2015-09-19
关键字: , ,
暂无评论

发表回复