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 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
随机推荐
- 怎样修改一个已存在的Cookie
Cookie的修改也需要借助 Response-Header 的 Set-Cookie 字段, 不过需要注意的是: 待修改cookie的 key / domain / path / secure 必须 ...
- java7:核心技术与最佳实践读书笔记——类加载
流程:class -> 加载 -> jvm虚拟机 -> 链接 . 一.类加载器概述 1.引出 类加载器也是一个java类,java.lang.ClassLoader类是所 ...
- 解决低版本IE关于html5新特性的兼容性问题html5shiv.js和Respond.js,以及excanvas.js解决低版本IE不支持canvas的问题
插件:html5shiv.js 让IE9以下版本支持html5新标签,git地址https://github.com/aFarkas/html5shiv 用于解决IE9以下版本浏览器对HTML5新增标 ...
- Windows 编程 键盘
键盘对于大家来说可能再也熟悉不过了,它和鼠标是现在最常用的电脑输入设备.虽然在现在的图形界面操作系统下使用鼠标比使用键盘更方便.更广泛,但是鼠标还是一时半会儿取代不了它的老前辈——键盘的地位,尤其是在 ...
- 使用 SQL的 for xml path来进行字符串拼接
本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3: ...
- ADO与达梦7产生的一个未知问题
采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时 报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...
- VUE实现简单的全选/全不选
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- (十四)Linux kernel mmc 框架说明,包括mmc_test使用方法
1.Linux 总线模型 Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用. 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有 ...
- 我的第一个Node.js项目
Node.js的安装通常有两种方式:自己编译源代码和使用编译好的文件,我这里使用编译好的文件目前我的home目录下有刚下载来的node-v4.2.3-linux-x641.首先解压缩 tar xvf ...
- 开启aix SFTP日志 是否和链接SFTP有关呢
1.修改SSH配置 vi /etc/ssh/sshd_config 在sftp配置处添加-l INFO -f AUTH Subsystem sftp /usr/lib64/ssh/sftp-serve ...