C++ #include<algorithm>
今天下午大致学完了进阶指南中algorithm头文件下的内容,在这里进行一个总结。
reverse翻转
顾名思义,reverse进行的操作就是翻转原来的顺序,理解非常简单,故不赘述。
操作样例:
#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int b[];
int main()
{
int na,nb;
//vector的实现
scanf("%d",&na);
for(int i=;i<na;i++)
{
int x;
scanf("%d",&x);
a.push_back(x);
}
reverse(a.begin(),a.end());
for(int i=;i<na;i++)
printf("%d ",a[i]);
cout<<endl;
//数组下的实现
scanf("%d",&nb);
for(int i=;i<=nb;i++)
scanf("%d",&b[i]);
reverse(b+,b++nb);
for(int i=;i<=nb;i++)
printf("%d ",b[i]);
return ;
}
unique去重
unique的含义仍然很好理解ovo,我也不说太多了,函数返回值可以是去重后的元素个数,比如:
int m=unique(a.begin(),a.end())-a.begin();
int n=unique(b+1,b+1+len)-b-1;
操作样例:
#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int b[];
int na,nb;
int main( )
{
scanf("%d",&na);
for(int i=;i<na;i++)
{
int x;
scanf("%d",&x);
a.push_back(x);
}
int ma=unique(a.begin(),a.end())-a.begin();
for(int i=;i<ma;i++)
printf("%d ",a[i]);
cout<<endl;
scanf("%d",&nb);
for(int i=;i<=nb;i++)
scanf("%d",&b[i]);
int mb=unique(b+,b++nb)-b-;
for(int i=;i<=mb;i++)
printf("%d ",b[i]);
return ;
}
random_shuffle随机打乱
用法和reverse相同,我都懒得写代码了...
sort快速排序
想必sort的一般用法大家都很熟悉了,不再赘述,但vector<struct>我以前倒没有接触过。
我看网上有很多博客介绍,但似乎都不太清晰,所以自己摸索出了一种比较麻烦占空间但简单易懂的方法,希望dalao指点。
操作实例:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
};
node b[];
vector<node>a;
bool operator <(const node &a,const node &b)
{
return a.x<b.x;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&b[i].x,&b[i].y);
a.push_back(b[i]);
}
sort(a.begin(),a.end());
for(int i=;i<a.size();i++)
printf("%d %d\n",a[i].x,a[i].y);
return ;
}
permutation全排列
组合数学大家一定多多少少都有所了解,全排列指的就是A(n,n)式的所有排列方法,也就是说五选五。
next_permutation()会取得[first,last)所标示之序列的下一个排列组合;
利用next_permutation的返回值,判断是否全排列结束 如果没有下一个排列组合,便返回false;
否则返true; STL提供了两个用来计算排列组合关系的算法; 分别是next_permutation和prev_permutation;
下一个全排列(next_Permutation) 前一个全排列(prev_permutation)
简单来说
next_permutation
按照字典序由小到大的全排列
prev_permutation
按照字典序由大到小的全排列
二者返回值为true/false 用来判断是否还有下一个排列 全排列的输出正常的for循环即可
注:两者为互逆运算
#include<bits/stdc++.h>
using namespace std;
int a[],b[];
int main()
{
int n1,n2;
cout<<"对next_permutation的操作\n";
cin>>n1;
for(int i=;i<=n1;i++)
cin>>a[i];//输入数据应该是一组数据全排列中字典序不为最大的一类
do
{
for(int i=;i<=n1;i++)
cout<<a[i]<<" ";
cout<<endl;
}while(next_permutation(a+,a++n1));
cout<<endl;
cout<<"对prev_permutation的操作\n";
cin>>n2;
for(int i=;i<=n2;i++)
cin>>b[i];//输入数据应该是一组数据全排列中字典序不为最小的一类
do
{
for(int i=;i<=n2;i++)
cout<<b[i]<<" ";
cout<<endl;
}while(prev_permutation(b+,b++n2));
return ;
}
lower_bound与upper_bound
l_b的作用是在一个区间内寻找第一个大于等于x的元素的位置,u_b是查找
第一个大于x的元素的位置,返回值就是其位置。
当然还有其他操作,比如它有一个很重要的作用就是和unique函数配套使用进行离散化,后续我会在STL的总结中具体解释。
#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int b[];
int na,nb,xa,xb;
int main()
{
scanf("%d%d",&na,&xa);
for(int i=;i<na;i++)
{
int x;
scanf("%d",&x);
a.push_back(x);
}
printf("%d\n",lower_bound(a.begin(),a.end(),xa)-a.begin());
scanf("%d%d",&nb,&xb);
for(int i=;i<=nb;i++)
{
scanf("%d",&b[i]);
}
printf("%d\n",upper_bound(b+,b++nb,xb)-b);
return ;
}
我的总结主要以代码为主,algorithm下的函数都简单易懂,没有用太多的文字说明,都是自己手打测试的操作实例,多测试几组数据,自然就明白了。
如果有不对的地方,希望dalao指正。>w<
C++ #include<algorithm>的更多相关文章
- #include <algorithm>
1 adjacent_find 查找重复的元素 2 find_if 查找符合条件的第一个元素 3 find_if_not 查找不符合条件的第一个元素 4 for_each 可以遍历每一个元素 5 pa ...
- #include <algorithm>中sort的一般用法
1.sort函数的时间复杂度为n*log2(n),执行效率较高. 2.sort函数的形式为sort(first,end,method)//其中第三个参数可选. 3.若为两个参数,则sort的排序默认是 ...
- #include<algorithm>里的函数
#include<algorithm>里的函数 #include<algorithm> 非修改性序列操作(12个) 循环 对序列中的每个元素执行某操作 for_ ...
- C++神奇算法库——#include<algorithm>
算法(Algorithm)为一个计算的具体步骤,常用于计算.数据处理和自动推理.C++ 算法库(Algorithms library)为 C++ 程序提供了大量可以用来对容器及其它序列进行算法操作的函 ...
- [Data Structure & Algorithm] Hash那点事儿
哈希表(Hash Table)是一种特殊的数据结构,它最大的特点就是可以快速实现查找.插入和删除.因为它独有的特点,Hash表经常被用来解决大数据问题,也因此被广大的程序员所青睐.为了能够更加灵活地使 ...
- vector algorithm find
本来想着申请了博客园以后 我要写的博客都必须是有深度有内涵的...好吧 结果我只能说我想多了 还是得一步一步慢慢来 最近小学期的任务是要做一个学校食堂餐卡管理系统 有“严重拖延症”的我 果然 ...
- hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏
reference: Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.top ...
- 1306. Sorting Algorithm 2016 12 30
1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
随机推荐
- django+uwsgi+nginx: websock 报502/400
耽搁了近2个月,终于解决了,主要是nginx/uwsgi/django相关的配置: 一.django工程settings.py,添加 WEBSOCKET_FACTORY_CLASS = "d ...
- python之random库的使用以及程序的异常处理
1.random库的使用: random库是使用随机数的Python标准库从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值 ...
- 常见python面试题-手写代码系列
1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()for x in tempList: pr ...
- LaTeX中Python代码的语法高亮
LaTeX中Python代码的语法高亮 本文中,"{}"中的字母为LaTeX或Python的包名,只有"Pygments"是Python的包,其他都是LaTeX ...
- 【python】python _、__、__xx__之间的差别
本文来自 yzl11 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yzl11/article/details/53792416?utm_source=copy 单下 ...
- shell脚本——字符串
printf printf "%-10s %-10s %-10s\n" NO Name Height printf "%-10s %-10s %-10d\n&quo ...
- AJAX—JSON和Django内置序列化
JSON 什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * J ...
- zabbix上添加交换机监控记事
zabbix上添加交换机监控记事 第一次使用zabbix来添加监控华为s5720交换机,根本找不到头绪,像个无头的苍蝇一样的百度来处理,结果都没有任何效果,给自己增加了很多痛苦和心烦,增加不少 ...
- linux——实际工作中如何使用linux
实际工作中,linux系统都不会在我们自己的电脑上,linux系统安装在机房的服务器上,我们操作linux不可能跑到机房去,所以我们需要有一个工具,能在公司通过网络远程连接到机房的linux服务器上 ...
- Spring管理Hibernate事务
在没有加入Spring来管理Hibernate事务之前,Hibernate对事务的管理的顺序是: 开始事务 提交事务 关闭事务 这样做的原因是Hibernate对事务默认是手动提交,如果不想手动提交, ...