*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. 替换Java WEB工程文件的指定字符串

    package com.utils; import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;impor ...

  2. switch下返回各类的数值

    定义一个变量,在每个case下赋值,最后return public static int orderDishes(int choice) { int price = 0; switch (choice ...

  3. 整理总结数据库常用sql语句,建议收藏,忘记了可以来看一下

    第一节课:sql语言介绍(参照PPT)及基本查询sql学习 1.数据库表的介绍 emp表:员工表 dept表:部门表 salgrady:薪资水平表 Balance: 2.基本的查询语句: 知识点: s ...

  4. Qt如何管理组件

    转载:清凉简装的博客 解决“要继续此操作,至少需要一个有效且已启用的储存库“问题 1.在Qt安装目录找到组件管理软件MaintenanceTool,双击. 2.点击下一步,出现要继续此操作,至少需要一 ...

  5. 安全性只是辅助效果?解读DevSecOps的核心动机

    DevSecOps背后的思想仅是对DevOps的扩展.就像开发人员以瀑布式开发风格将项目扔给运营团队以使其在生产中工作一样,即使使用“ DevOps”,安全性也与应用程序开发或运营完全分开. DevS ...

  6. Rocket - tilelink - Monitor

    https://mp.weixin.qq.com/s/6e-G5RSQc7Xje7mQj8-Lag   简单介绍Monitor的实现.   ​​   1. 基本介绍   用于监控各个channel上的 ...

  7. Liunx下使用wine容器实现跨平台使用软件

    首先在Liunx中使用QQ,网易云音乐,等这些软件是很痛苦的,某些软件可能会有Liunx版本,但是像腾讯QQ早年前也提供过Linux版本,后来就下架了!!! 这里我以ubuntu18.04版本为列,讲 ...

  8. EntityFramework数据持久化 Linq语法应用

    Linq基础语法 LINQ概述 LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式查询的统一模型. LINQ的组成: LINQ To Object ...

  9. SQL Server账号密码(sa)登录失败 错误原因:233

    (其实以前经常用的时候,都很简单,最近一段时间不用了,再一看发现都忘记的差不多了,还是写一篇博客吧,防止下一次再在这种问题上面浪费时间) 右键此电脑,点击管理 如果没有此电脑打开文件夹 在这里右键也是 ...

  10. java实现迷宫走法

    ** 迷宫走法** 迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更愿意使用"紧贴墙壁,靠右行走"的简单规则. 下面的 ...