*cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare

区间:容器中的全部数据或者部分数据,都叫做区间

equal(b,e,b2),比较两个容器数据是不是相等 ,b(容器1,迭代器begin()),e(容器1,迭代器end(),b2(容器2,迭代器2指向的位置,begin2
if(equal(ivec.begin(),ivec.end(),ilist.begin()))

equal(b,e,b2,p) p,parameter,函数对象,谓词
mismatch(b,e,b2)比较两个容器中第一个不相等的数据
mismatch(b,e,b2,p)

lexicographical_compare(b,e,b2,e2)用来比较第一个区间是不是不第二个区间小,区间1<区间2
lexicographical_compare(b,e,b2,e2,p)
两个字符串的字母排序是通过从第一个字符开始比较对应字符得到的。第一对不同的对应字符决定了哪个字符串排在首位。
字符串的顺序就是不同字符的顺序。如果字符串的长度相同,而且所有的字符都相等,那么这些字符串就相等。
如果字符串的长度不同,短字符串的字符序列和长字符串的初始序列是相同的,那么短字符串小于长字符串。因此 “age” 在“beauty” 之前,
“a lull” 在 “a storm” 之前。显然,“the chicken” 而不是 “the egg” 会排在首位。

对于任何类型的对象序列来说,字典序都是字母排序思想的泛化。
从两个序列的第一个元素开始依次比较对应的元素,前两个对象的不同会决定序列的顺序。显然,序列中的对象必须是可比较的。

lexicographical_compare()算法可以比较由开始和结束迭代器定义的两个序列。
它的前两个参数定义了第一个序列,第 3 和第 4 个参数分别是第二个序列的开始和结束迭代器。
默认用 < 运算符来比较元素,但在需要时,也可以提供一个实现小于比较的函数对象作为可选的第 5 个参数。
如果第一个序列的字典序小于第二个,这个算法会返回 true,否则返回 false。所以,返回 false 表明第一个序列大于或等于第二个序列。

 /*cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare

 区间:容器中的全部数据或者部分数据,都叫做区间

 equal(b,e,b2),比较两个容器数据是不是相等 ,b(容器1,迭代器begin()),e(容器1,迭代器end(),b2(容器2,迭代器2指向的位置,begin2
if(equal(ivec.begin(),ivec.end(),ilist.begin())) equal(b,e,b2,p) p,parameter,函数对象,谓词
mismatch(b,e,b2)比较两个容器中第一个不相等的数据
mismatch(b,e,b2,p) lexicographical_compare(b,e,b2,e2)用来比较第一个区间是不是不第二个区间小,区间1<区间2
lexicographical_compare(b,e,b2,e2,p)
两个字符串的字母排序是通过从第一个字符开始比较对应字符得到的。第一对不同的对应字符决定了哪个字符串排在首位。
字符串的顺序就是不同字符的顺序。如果字符串的长度相同,而且所有的字符都相等,那么这些字符串就相等。
如果字符串的长度不同,短字符串的字符序列和长字符串的初始序列是相同的,那么短字符串小于长字符串。因此 “age” 在“beauty” 之前,
“a lull” 在 “a storm” 之前。显然,“the chicken” 而不是 “the egg” 会排在首位。 对于任何类型的对象序列来说,字典序都是字母排序思想的泛化。
从两个序列的第一个元素开始依次比较对应的元素,前两个对象的不同会决定序列的顺序。显然,序列中的对象必须是可比较的。 lexicographical_compare()算法可以比较由开始和结束迭代器定义的两个序列。
它的前两个参数定义了第一个序列,第 3 和第 4 个参数分别是第二个序列的开始和结束迭代器。
默认用 < 运算符来比较元素,但在需要时,也可以提供一个实现小于比较的函数对象作为可选的第 5 个参数。
如果第一个序列的字典序小于第二个,这个算法会返回 true,否则返回 false。所以,返回 false 表明第一个序列大于或等于第二个序列。
*/ #include <iostream>
#include <algorithm>
#include <vector>
#include <list> using namespace std; bool bothEvenOrOdd(int elem1, int elem2)//二元谓词,返回是bool型,就是谓词
{
return elem1% == elem2%;
}
//两个容器奇数偶数对应。 int main()
{
vector<int> ivec;
list<int> ilist; for (int i = ; i <= ; ++i)
ivec.push_back(i);
for (int i = ; i <= ; ++i)
ilist.push_back(i); cout << "vector里面的数据:" << endl;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout<< *iter << ' ';
cout << endl;
cout << "list里面的数据:" << endl;
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl; if (equal(ivec.begin(), ivec.end(), ilist.begin()))
cout << "ivec等于ilsit" << endl;
else
cout << "ivec不等于ilist" << endl; //谓词比较
//equal(b,e,b2,p) p,parameter,函数对象,谓词
////两个容器奇数偶数对应。
if (equal(ivec.begin(), ivec.end(), ilist.begin(), bothEvenOrOdd))
{
cout << "两个容器奇数偶数对应" << endl;
}
else
cout << "两个容器奇数偶数不对应" << endl; return ;
}
 /*
//mismatch 返回值是pair,就是返回1对迭代器
pair<vector<int>::iterator, list<int>::iterator> values;
values = mismatch(ivec.begin(), ivec.end(), ilist.begin());
cout << "找到了。/ivec里面的第一个小于等于list里面的数: " <<values.first<<" and 容器2的值:"<<values.second<< endl;
1>d:\users\txwtech\projects\cb36b\cb36b\cb36b.cpp(39): error C2679: 二进制“<<”: 没有找到接受“_Ty1”类型的右操作数的运算符(或没有可接受的转换) values.first需要解引用。
改为:cout<<*values.first<<endl;
*/ #include <iostream>
#include <algorithm>
#include <vector>
#include <list> using namespace std; int main()
{
vector<int> ivec;
list<int> ilist;
for (int i = ; i <= ; ++i)
ivec.push_back(i);
for (int i = ; i <= ; i *= )
ilist.push_back(i);
ilist.push_back(); for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
//mismatch 返回值是pair,就是返回1对迭代器
pair<vector<int>::iterator, list<int>::iterator> values;
values = mismatch(ivec.begin(), ivec.end(), ilist.begin()); if (values.first == ivec.end())
cout << "没有找到不相等的数,但不代表两个区间相等" << endl;
else
cout << "找到了第一个不相等的,不匹配的数" <<*values.first<<" and "<<*values.second<< endl;
values = mismatch(ivec.begin(), ivec.end(), ilist.begin(), less_equal<int>());
//less_equal<int>(),小于等于。是一个预定义函数对象.作为谓词
//参考:https://www.cnblogs.com/txwtech/p/12328141.html
//ivec里面的第一个小于等于list里面的数
if (values.first == ivec.end())
cout << "没有找到。/ivec里面的第一个小于等于list里面的数" << endl;
else
cout << "找到了。/ivec里面的第一个小于等于list里面的数: " <<*values.first<<" and 容器2的值:"<<*values.second<< endl; return ;
}
 /*cb36c

 lexicographical_compare(b,e,b2,e2)用来比较第一个区间是不是不第二个区间小,区间1<区间2
if (lexicographical_compare(c4.begin(), c4.end(), c1.begin(), c1.end())) lexicographical_compare(b,e,b2,e2,p)
两个字符串的字母排序是通过从第一个字符开始比较对应字符得到的。第一对不同的对应字符决定了哪个字符串排在首位。
字符串的顺序就是不同字符的顺序。如果字符串的长度相同,而且所有的字符都相等,那么这些字符串就相等。
如果字符串的长度不同,短字符串的字符序列和长字符串的初始序列是相同的,那么短字符串小于长字符串。因此 “age” 在“beauty” 之前,
“a lull” 在 “a storm” 之前。显然,“the chicken” 而不是 “the egg” 会排在首位。 对于任何类型的对象序列来说,字典序都是字母排序思想的泛化。
从两个序列的第一个元素开始依次比较对应的元素,前两个对象的不同会决定序列的顺序。显然,序列中的对象必须是可比较的。 lexicographical_compare()算法可以比较由开始和结束迭代器定义的两个序列。
它的前两个参数定义了第一个序列,第 3 和第 4 个参数分别是第二个序列的开始和结束迭代器。
默认用 < 运算符来比较元素,但在需要时,也可以提供一个实现小于比较的函数对象作为可选的第 5 个参数。
如果第一个序列的字典序小于第二个,这个算法会返回 true,否则返回 false。所以,返回 false 表明第一个序列大于或等于第二个序列。 cout << "8个list排序后,全部打印出来" << endl;
for_each(cc.begin(), cc.end(), printCollection);
cout << endl;
*/ #include <iostream>
#include <algorithm>
#include <list>
#include <vector> using namespace std; void printCollection(const list<int>& l)
{
for (list<int>::const_iterator iter = l.begin(); iter != l.end(); ++iter)
{
cout << *iter << ' '; }
cout << endl;
}
bool lessForCollection(const list<int>& list1,const list<int>& list2)
{
return lexicographical_compare(list1.begin(), list1.end(), list2.begin(), list2.end());
} int main()
{
list<int> c1, c2, c3, c4;
for (int i = ; i <= ; ++i)
c1.push_back(i);
c4 = c3 = c2 = c1; c1.push_back();
c3.push_back();
c3.push_back();
c4.push_back();
cout << "c1: ";
printCollection(c1);
cout << "c2: ";
printCollection(c2);
cout << "c3: ";
printCollection(c3);
cout << "c4: ";
printCollection(c4); cout << "lexicogrphical返回布尔bool" << endl;
if (lexicographical_compare(c4.begin(), c4.end(), c1.begin(), c1.end()))
cout << "c4小于c1" << endl;
else
cout << "c4不小于c1" << endl; if (lexicographical_compare(c2.begin(), c2.end(), c3.begin(), c3.end()))
cout << "c2小于c3" << endl;
else
cout << "c2不小于c3" << endl; if (lexicographical_compare(c4.begin(), c4.end(), c3.begin(), c3.end()))
cout << "c4小于c3" << endl;
else
cout << "c4不小于c3" << endl; vector<list<int>> cc;
cc.push_back(c1);
cc.push_back(c2);
cc.push_back(c3);
cc.push_back(c4);
cc.push_back(c3);
cc.push_back(c1);
cc.push_back(c4);
cc.push_back(c2); cout << "8个list全部打印出来" << endl;
for_each(cc.begin(), cc.end(), printCollection);
cout << endl; sort(cc.begin(), cc.end(), lessForCollection); cout << "8个list排序后,全部打印出来" << endl;
for_each(cc.begin(), cc.end(), printCollection);
cout << endl; return ;
}

cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare的更多相关文章

  1. cb50a_c++_STL_算法_局部排序partial_sort

    cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...

  2. cb37a-_c++_STL_算法_复制元素copy_copy_backward

    cb37a-_c++_STL_算法_复制元素copy_copy_backward copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝copy_backward()//向后copy 注意: ...

  3. cb34a_c++_STL_算法_查找算法_(7)_lower_bound

    cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置uppe ...

  4. cb33a_c++_STL_算法_查找算法_(6)binary_search_includes

    cb33a_c++_STL_算法_查找算法_(6)binary_search_includes//针对已序区间的查找算法,如set,multiset关联容器-自动排序binary_search(b,e ...

  5. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_findadjacent_find(b,e),b,begin(),e,end()adjacent_find(b,e,p),p-par ...

  6. cb28a_c++_STL_算法_查找算法_(1)find_find_if

    cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...

  7. cb51a_c++_STL_算法_根据第n个元素排序nth_element

    cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...

  8. cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort

    cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...

  9. cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition

    cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition random_shuffle()//重排,随机重排,打乱顺序 partition()分区,把 ...

随机推荐

  1. 2020由浅入深最强Java面试题

    1.String,StringBuffer和StringBuilder有什么区别?     String是字符串常量,不可变对象,每次对String修改都等同于生成了一个新的String象,然后将指针 ...

  2. Spring Boot集成Shrio实现权限管理

    Spring Boot集成Shrio实现权限管理   项目地址:https://gitee.com/dsxiecn/spring-boot-shiro.git   Apache Shiro是一个强大且 ...

  3. [批处理教程之Shell]001.文本处理

    在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于DOS下的command和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. 同时 ...

  4. 七、Spring MVC高级技术

    知识点 处理文件上传 使用flash属性 在控制器中处理异常 关键词 控制器通知 (Controller Advice) 7.1 处理异常 Spring提供了多种方式将异常转换为响应: 特定的Spri ...

  5. Beta冲刺——5.26

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.组员一起学习Git分支管 ...

  6. Rocket - spec - RISC-V规范整理

    https://mp.weixin.qq.com/s/xP8JRhkmgUQf0QRm3S2mjA   根据RISC-V规范整理的几个文档.   ​​     1. 原文链接 https://risc ...

  7. position的值?

    static(默认):按照正常文档流进行排列:relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位:absolute(绝对定位):参 ...

  8. 多线程与RunLoop

    iOS开发中的多线程 一个iOS程序,默认开启1条线程--主线程orUI线程 主线程主要作用:         显示/刷新UI界面         处理UI事件(点击.滚动.拖拽事件等) 主线程使用注 ...

  9. 分布式事务专题笔记(二)分布式事务解决方案之 2PC(两阶段提交)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 前面已经了解了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC.TCC ...

  10. Java实现 蓝桥杯 算法提高 抽卡游戏

    试题 算法提高 抽卡游戏 某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个"井"的机制,抽满k次卡后直接送这张限定卡.试求获得这张限定卡需要的期望抽卡次数.输入为一行,用空格隔开 ...