看到这个函数, 有些人一定以为这个函数是用来判断两个数据是否相等的,但很遗憾,你被它的外表欺骗了,这个函数比较的是两个范围是否相等(或者符合给定条件), 和大多数函数一样,这个函数有两种形式,一种是带谓词的版本,另一种是不带谓词的版本,它的一种实现方式如下:
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
以上均为个人观点,如果有错误,请大家指正,如果有什么地方没有说明白也可以在下面留言。
