今天下午大致学完了进阶指南中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>的更多相关文章

  1. #include <algorithm>

    1 adjacent_find 查找重复的元素 2 find_if 查找符合条件的第一个元素 3 find_if_not 查找不符合条件的第一个元素 4 for_each 可以遍历每一个元素 5 pa ...

  2. #include <algorithm>中sort的一般用法

    1.sort函数的时间复杂度为n*log2(n),执行效率较高. 2.sort函数的形式为sort(first,end,method)//其中第三个参数可选. 3.若为两个参数,则sort的排序默认是 ...

  3. #include<algorithm>里的函数

    #include<algorithm>里的函数   #include<algorithm>     非修改性序列操作(12个)   循环 对序列中的每个元素执行某操作 for_ ...

  4. C++神奇算法库——#include<algorithm>

    算法(Algorithm)为一个计算的具体步骤,常用于计算.数据处理和自动推理.C++ 算法库(Algorithms library)为 C++ 程序提供了大量可以用来对容器及其它序列进行算法操作的函 ...

  5. [Data Structure & Algorithm] Hash那点事儿

    哈希表(Hash Table)是一种特殊的数据结构,它最大的特点就是可以快速实现查找.插入和删除.因为它独有的特点,Hash表经常被用来解决大数据问题,也因此被广大的程序员所青睐.为了能够更加灵活地使 ...

  6. vector algorithm find

    本来想着申请了博客园以后 我要写的博客都必须是有深度有内涵的...好吧 结果我只能说我想多了 还是得一步一步慢慢来 最近小学期的任务是要做一个学校食堂餐卡管理系统     有“严重拖延症”的我  果然 ...

  7. 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 ...

  8. 1306. Sorting Algorithm 2016 12 30

    1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...

  9. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

随机推荐

  1. hdu 6069 Counting divisors 公式+区间筛

    比赛的时候把公式扣出来了,,但是没有想到用筛法算公因子,,默默学习一下.. 题解:设n=p1^(c1)p2^{c2}...pm^{cm},n=p​1^​c​1*​​​​p​2​^c​2​​​​...p ...

  2. C结构体与JavaBean转化

    1 概述 (1)项目开发过程可能涉及多种语言,而多种语言之间如何数据交换格式是多种多样的,比如说:Java和JavaScript可以用json,Java和C#可以用xml等等. (2)这里提供一种C与 ...

  3. [转载]为什么jar包中能看见源码

    [转载]为什么jar包中能看见源码 这个也是我之前发现过的一个现象,只是之前没有研究过.今天正好在知乎看见,总结一下: 对于Maven或者Gradle项目,依赖的部分会自动从远程仓库下载源码 生成的j ...

  4. C++ 构造函数后面的冒号的作用

    其实冒号后的内容是初始化成员列表,一般有三种情况:     1.对含有对象成员的对象进行初始化,例如,     类line有两个私有对象成员startpoint.endpoint,line的构造函数写 ...

  5. LeetCode 腾讯精选50题--子集

    根据题意,找到几何中的所有子集,说实话子集是没有什么头绪的,因为如果采用遍历的方法,稍有遗漏不说,代码的嵌套循环层数随着数组大小的增加而增加,想了很久没有头绪后就去看了看评论,然后就被点破了解题的关键 ...

  6. Ubuntu Nginx Uwsgi Python布置服务器Django项目

     1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...

  7. 记一次引用maven插件报错解决方法

    1.报错信息如图: plugin org.springframework.boot:spring-boot-maven-plugin not found 2.解决方案: maven的配置文件[sett ...

  8. LoadRunner(3)

    一.性能测试的策略 重要的:基准测试.并发测试.在线综合场景测试 递增测试.极限测试... 1.基准测试:Benchmark Testing 含义:就是单用户测试,单用户.单测试点.执行n次: 作为后 ...

  9. CSS世界中那些说起来很冷的知识

    CSS世界中那些说起来很冷的知识 最近读了张鑫旭的新书<CSS世界>收获了不少对CSS的深度理解 也正值个人在公司内部进行部分章节的内容分享,于是顺带着直接把我即将分享的内容先给大家过过目 ...

  10. python改成了python3的版本,那么这时候yum就出问题了

    既然把默认python改成了python3的版本,那么这时候yum就出问题了,因为yum貌似不支持python3,开发了这个命令的老哥也不打算继续写支持python3的版本了,所以,如果和python ...