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 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
随机推荐
- JavaScript数组方法之reduce
又见到数组方法了,在前面已经的多次写到过数组方法,甚至都使用原生方法重构了一遍数组的各个方法,可是随着数组方法reduce的应用,发现reduce真的是妙用无穷啊!还是很值得再拿出来说一遍的. 我们再 ...
- Faster RCNN学习笔记
感谢知乎大神的分享 https://zhuanlan.zhihu.com/p/31426458 Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster R ...
- selenium 12306模拟登陆
代码应用场景 :基于第三方打码网站模拟登陆12306 验证码识别 基于第三方平台超级鹰识别 超级鹰官网:http://www.chaojiying.com/user/ 超级鹰使用流程: 注册 登陆(用 ...
- react快速上手二(使用JSX语法)
前提: 下载依赖,配置 cnpm i babel-preset-react -D JSX语法的本质: 还是以 React.createElement 的形式来实现的,并没有直接把 用户写的 HTML代 ...
- LEANGOO用户设置
转自:https://www.leangoo.com/leangoo_guide/leangoo_guide_kanban_user.html#toggle-id-7 1. 点击屏幕右上角头像或用户名 ...
- ADF为EO的ITEM添加默认值
Literal:设置为缺省的静态值.Expression:使用 Groovy 表达式设置缺省值.下面是一个表达式,用于将数据库序列(EMPLOYEES_SEQ)作为主键的缺省值:(new oracle ...
- vue父组件传值和子组件触发父组件方法
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script> <scr ...
- 变种XSS:持久控制
变种XSS:持久控制 tig3r · 2015/11/30 10:42 0x00 引言 首先声明,这不是一个新洞,看过 Homakov 文章(最后附)以及译文的人想必对这种漏洞有所了解. 但原文写的太 ...
- ES bulk 批量操作
bulk允许在一个请求中进行多个操作(create.index.update.delete),也就是可以在一次请求裡做很多事情 也由于这个关系,因此bulk的请求体和其他请求的格式会有点不同 bulk ...
- Oracle笔记(十) 约束
表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束.唯 ...