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()分区,把 ...
随机推荐
- LeetCode树专题
LeetCode树专题 98. 验证二叉搜索树 二叉搜索树,每个结点的值都有一个范围 /** * Definition for a binary tree node. * struct TreeNod ...
- Ant 的最完整build.xml(转)
Ant的概念 Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平 ...
- 一元三次方程组求解 luogu P1024
题目传送门 首先,要明确题目信息,f(x1) * f(x2) < 0, 则一定存在实数根在区间(x1, x2).且所有的根都在[-100, 100)之间.根与根的绝对值之差 >= 1 那么 ...
- [Objective-C] 019_UIVIewController
UIViewController是iOS程序中的一个重要组成部分,对应MVC设计模式的C,它管理着程序中的众多视图,何时加载视图,视图何时消,界面的旋转等. 1.UIViewController 创建 ...
- 逃离CSDN
2012年2月18日,从CSDN搬家到这里.对于搬家的理由,总觉得该说点什么.我是在2012年1月29日又开始写博客的,在此之前我的CSDN博客闲置了10个月.从1月29日开始,不到1个月的时间建立了 ...
- AD17无法复制原理图到Word的解决方法
标题: 解决AD17无法复制原理图到WORD 作者: 梦幻之心星 347369787@QQ.com 标签: [AD, Word, 原理图] 目录: 软件 日期: 2019-3-17 目录 前提说明: ...
- [01]HTML基础之简单介绍
1.前言 现如今科技进步,足不出户尽晓天下事,一转身便仿若隔世茫然.科技绽放时代,网络技术对人们的触变无疑是深远而重大的,隐于缤纷绚丽的网页背后,是前端的蜕变更新. 如今,随意点开页面,绚丽华彩的特效 ...
- dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用
一.背景: 近期使用dell5460笔记本在ubuntu系统下观看视频,发现没有声音,考虑安装音频驱动. 二.音频驱动的安装 linux系统的音频驱动基于ALSA(即Advanced Linux So ...
- 分享按钮(QQ,微信,微博等)移入动画效果
ps:最近写的很多博客都是在以前在项目里写过的,之所以现在写出来,最大的目的就是希望自己以后用到的时候比较容易找,而且现在再写一遍,有助于加深印象! 很简单的效果,说先实现方式: 1.图标来自 阿里巴 ...
- Java实现 LeetCode 747 至少是其他数字两倍的最大数(暴力)
747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 ...