cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare
*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的更多相关文章
- cb50a_c++_STL_算法_局部排序partial_sort
cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...
- cb37a-_c++_STL_算法_复制元素copy_copy_backward
cb37a-_c++_STL_算法_复制元素copy_copy_backward copy(),同一个容器内部区间的拷贝,或者容器与容器之间的拷贝copy_backward()//向后copy 注意: ...
- cb34a_c++_STL_算法_查找算法_(7)_lower_bound
cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置uppe ...
- cb33a_c++_STL_算法_查找算法_(6)binary_search_includes
cb33a_c++_STL_算法_查找算法_(6)binary_search_includes//针对已序区间的查找算法,如set,multiset关联容器-自动排序binary_search(b,e ...
- 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 ...
- cb28a_c++_STL_算法_查找算法_(1)find_find_if
cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...
- cb51a_c++_STL_算法_根据第n个元素排序nth_element
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...
- 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) ...
- cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition
cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition random_shuffle()//重排,随机重排,打乱顺序 partition()分区,把 ...
随机推荐
- Vue混入的详解
简介 混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项.钩子函数合并 ...
- Unity调用Android Studio中的Java方法
1. 新建Unity项目: 2. Android Studio中新建EmptyActivity: 3. 新建安卓项目时记住最小版本号: 4. 将左侧项目文件浏览面板切换到Project项下,在本项根节 ...
- Mac配置Jenkins(构建Allure模板报告)
通过jenkins.pkg程序安装 1.修改环境配置 编辑 vi ~/.bash_profile,添加命令别名: alias jk_start="sudo launchctl load /L ...
- golang垃圾回收机制
golang的GC,1.8通过混合写⼊屏障, 使得STW降到了sub ms.go语言中程序代码执行和垃圾回收是并发执行的. 当前Go GC特征 :三色标记,并发标记和清扫,非分代,非紧缩,混合写屏障. ...
- Flask 蓝图进行路由分发.md
Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处 ...
- DFA最小化
1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是什么? 文法中,对于某个非终结符号的规 ...
- Rocket - tilelink - TLArbiter
https://mp.weixin.qq.com/s/0ob-Fq-ZOoj-_S7pTJu6rQ 介绍TLArbiter的实现,主要关注如何实现burst的多个beat的输出. 1 ...
- java实现第四届蓝桥杯马虎的算式
马虎的算式 题目描述 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答 ...
- java实现第五届蓝桥杯猜字母
猜字母 题目描述 把abcd-s共19个字母组成的序列重复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母. 得到的新串再进行删除 ...
- (一)SQL注入漏洞测试的方式总结
一.工具注入 1.SQLMap的作用 判断可注入的参数 判断可以用那种SQL注入技术来注入 识别出哪种数据库 根据用户选择,读取哪些数据(库.表.列.字段值...) 2.注入技术 [A]基于布尔的盲注 ...