STL初探
关于STL的一些东西
感言:
学C++不学STL函数库的人可能都是。。。
有点问题
头文件<algorithm>的一些东西
sort,快排:
这是个初学者必需掌握的东西,及其好用,因为方(lan)便(duo)。
sort(a+1,a+1+n);是最基本的,你还可以根据这个随意改变数组名称,区间范围(只要确定你需要排序数组的开头和结尾的数组的代号)
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{
cin>>n;
int a[n+];
for(int i=;i<=n;i++)
cin>>a[i];
sort(a+,a++n);
for(int i=;i<=n;i++)
cout<<a[i];
}
next_permutation与prev_permutation,不重复的全排列:
这玩意貌似没啥人知道,因为全排列可以自己打,而且STL本来就慢,但是因为方(lan)便(duo)还是挺好用的。这里介绍一下,next_permutation是按照字典序排列的全排列而prev_permutation则是逆字典序排列的。要使用这个东西,你必须确定你需要排列数组的值的
顺序!!!
例如,你用next_permutation排列(3,1,2)会得出(3,1,2);(3,2,1);
而用next_permutation排列(1,2,3)会得出(1,2,3);(1,3,2);(2,1,3);(2,3,1);(3,1,2);(3,2,1);
所以顺序很重要!!!如果你想要得出全部答案一个范围的排序,next_permutation你就从小到大来,prev_permutation你就从大到小来,值得一提的是这玩意返回值是bool类型的,偶买噶!!!;
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{
cin>>n;
int a[n+];
for(int i=;i<=n;i++)
cin>>a[i];
do
{
for(int i=;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
while(next_permutation(a+,a+n+));
}
lower_bounde与upper_bound,二分
这个东西也是稀奇古怪的STL,也是一个比较没用的的STL,毕竟二分可以自己打嘛。不过还是要提一下,lower_bound是在一个区间查找第一个大于等于你所指定数的数,upper_bound则是去掉等于符号->大于你所指定的数。肯定需要给个区间,但最重要的是。。。
顺序!!!
是的,一样需要顺序(别以为STL二分就不需要顺序) 是不是看起来很棒(fei)。最有毒的是这个玩意返回的是个地址,所以你还得减去个地址,真棒呵。
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,ans;
int main()
{
cin>>n>>k;
int a[n+];
for(int i=;i<=n;i++)
cin>>a[i];
ans=lower_bound(a+,a++n,k)-a; // ans=upper_bound(a+1,a+1+n,k)-a;
cout<<ans;
}
unique,去重
这个东西算是很有效的一种工具了,这个有个很大的缺陷就是它只能“消除”它左右两边的重复数字,原因是它不是“消除”,而是让后面的数字“替代”前面的重复数字,更改他们的位置。所以一般需要排完一遍序才能操作。不得不感叹,STL真的啥都给你做好了。然而这玩意又是返回地址的,真的不能理解,STL咋天天返回地址。我就不减下标了,直接用指针。
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int main()
{
cin>>n;
int a[n+];
for(int i=;i<=n;i++)
cin>>a[i];
k=*unique(a+,a++n);
cout<<k<<endl;
for(int i=;i<=k;i++)
cout<<a[i]<<" ";
}
random_shuffle和reverse
咳咳,在LYD所著的算法竞赛——进阶指南中提到这两个是相同用法,emmmm我也不知道怎么相同用法,但确实不一样,今天就来提一下,在random_shuffle中的确就是考研人品的时候,真的随机打乱,其他真的不知道,也只能orz一下别的找处规律的大佬。而在reverse中它就是将你输入进去的数翻转一下——比如你开了a[4]的数组,那么储存在编号0的数就换与编号3的地方交换,一一对应,同样他也需要一个区域,跟sort填写方式差不多,上代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{
cin>>n;
int a[n+];
for(int i=;i<=n;i++)
cin>>a[i];
reverse(a+,a++n); //random_shuffle(a+1,a+1+n);
for(int i=;i<=n;i++)
cout<<a[i]<<" ";
}
不知不觉,algorithm(STL算法)就结束了,这只是浩大的STL中微不足道(好像还挺重要的)的一个头文件,前进吧,骚年们,向着伟大的STL容器出发。
关于头文件<vector>的一些东西
vector:
我们要讲的vector,你可以把它理解成一个给你开好了的“一维自动变长合理规划空间支持随机访问的数组”(呼~呼~呼~~)
一些板栗:
vector<int>a ------这是一个一维“int”类型的数组
vector<int> a[1001]---------这是一个一维开了编号0~1000,二维自动变长的数组
sturct blablabla vector<blablabla> a//a[1001]--------同样支持结构体哟
一些板栗的正确吃法:
size和empty:
这个很好理解的吧,size表大小,就是vector到底有多长。empty表空。。。(理屈词穷),就是你懂得,返回的是一个bool类型的,表是否为空,空即为1,不空即为0.
持续更新中!!!
STL初探的更多相关文章
- C++模板之Vector与STL初探
STL源码初步接触 STL = Standard Template Library,直译过来是:标准模板库,是惠普实验室开发的一系列软件的统称.从根本上说,STL是一些"容器"的集 ...
- C++ STL 初探
学过C++的人肯定会很熟悉STL标准模板库,STL其实就是封装了一系列的接口,供我们调用.很多函数或者算法的实现不需要我们从头开始写,大大提高我们的编程效率.这篇博客在简单介绍STL的情况下,会详细的 ...
- c++ STL容器初探
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- 初探STL之算法
算法 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包括头文件<algor ...
- 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探
本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...
- nginx平台初探(100%)
http://tengine.taobao.org/book/chapter_02.html 初探nginx架构(100%)¶ 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么 ...
- nginx -- nginx平台初探(100%)
初探nginx架构(100%) 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在un ...
- A*寻路初探(转载)
启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...
- stl::iterator汇总
STL——iterator 一.概述Iterator(迭代器)模式又称Cursor(游标)模式, 根据STL中的分类,iterator包括:Input Iterator:只能单步向前迭代元素,不允许修 ...
随机推荐
- 轻量级RPC设计与实现第一版
什么是RPC RPC (Remote Procedure Call Protocol), 远程过程调用,通俗的解释就是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应 ...
- rownum按某字段排序查询
特点:rownum伪列,查询结果按顺序从1递增排列 用途:按某字段排序查询第几名到第几名的数据 但加上按字段排序条件后,rownum并不会从1递增 需把按字段排序查询的数据作为一张表,再次查询,row ...
- gulp常用插件之wiredep使用
更多gulp常用插件使用请访问:gulp常用插件汇总 wiredep这是一款gulp插件,能够将js.css文件自动插入到html中. 更多使用文档请点击访问wiredep工具官网. Bower是一个 ...
- mybatis第二天02
MyBatis第二天内容 1.mybatis的执行原理 通过: 1.全局配置文件SqlMapConfig.xml 映射文件mapper.xml 获取得到SqlSessinFactory工厂 2.由工 ...
- Unable to execute command or shell on remote system: Failed to Execute process
1.问题描述 先说下我的项目环境:jenkins部署在windows下面,项目部署也是在windows下面,ssh服务器是FreeSSHd,原来是打算用Send files or execute co ...
- Centos7 同时运行PHP5.2和PHP7.1配置
工作环境一直都是lnmp,其中PHP已经升级到7.1版本了.突然有份代码需要运行在PHP5.2上.但是之前的环境还是需要的,所以需要在centos中再安装PHP5.2. 0.之前的php7安装在/us ...
- 数据库异常:SQL Error: 0, SQLState: S0022
问题描述 在本地搭建 mysql + MyEclipse + tomcat,系统跑起来之后,调用自己写的查询接口,报错“SQL Error: 0, SQLState: S0022” 具体报错: - ...
- 题解 AT5632 【Sum of Two Integers】
在幼儿园的时候,我们就学习过把一个数分成\(a\)与\(b\),我们只需要用计算机来模拟这个过程就可以了. 我们先从奇数开始看起,以\(5\)为例: 我们可以发现,\(5\)可以分成\(1\)和\(4 ...
- Python之四:控制流
1.If 逻辑判断: if a: b elif c: d else: e 先判断a语句块的值是否为真,如果为真,则执行b语句块,如果不为真则转到elif判断c语句块的值是否为真,如果为真执行d语句块, ...
- 假期学习【三】HDFS操作及spark的安装/使用
1.安装 Hadoop 和 Spark 进入 Linux 系统,参照本教程官网“实验指南”栏目的“Hadoop 的安装和使用”,完 成 Hadoop 伪分布式模式的安装.完成 Hadoop 的安装以后 ...