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:只能单步向前迭代元素,不允许修 ... 
随机推荐
- Qt中MySQL数据库的操作例程
			数据库连接不成功时,要将libmysql.dll放到C:\Qt\Qt5.11.0\5.11.0\mingw53_32\bin和C:\Qt\Qt5.11.0\5.11.0\msvc2017_64\bin ... 
- 在 Node 中使用 formidable 处理文件上传
			具体使用方式参照官方文档:https://www.npmjs.com/package/formidable 第一:安装: # npm install --save formidable yarn ad ... 
- 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型
			// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ... 
- oracle add_month函数
			本文转自:https://blog.csdn.net/lanchengxiaoxiao/article/details/7695057 add_months 函数主要是对日期函数进行操作,举例子进行说 ... 
- 安装Docker到Ubuntu(APT)
			运行环境 系统版本:Ubuntu 16.04.5 LTS 软件版本:Docker-CE-18.09.5 硬件配置:无 安装过程 1.卸载旧版本 root@ubuntu:~# sudo apt-get ... 
- 137.在Django中操作session
			在Django中操作session 在django中session默认情况下是存储在服务器的数据库中的,在表中会根据sessionid来提取指定的session数据,然后再把这个sessionid放到 ... 
- mysql执行顺序及左连接和右连接
			SELECT语句执行顺序 SELECT语句中子句的执行顺序与SELECT语句中子句的输入顺序是不一样的,所以并不是从SELECT子句开始执行的,而是按照下面的顺序执行: 开始->FROM子句-& ... 
- Yarn报错:Could not find any valid local directory for nmPrivate/
			原因: yarn.nodemanager.local-dirs和hadoop的hadoop.tmp.dir参数对应文件位置不一致 解决办法: 将hdfs-site.xml中hadoop.tmp.dir ... 
- AcWing 1052. 设计密码
			//f[i][j]表示前 i 个字符与字符串匹配长度为 j 时的方案数 #include <cstring> #include <iostream> #include < ... 
- Java8之Stream详解
			Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作. 一.流的初始化与转换 Java中的Stream的所有操作 ... 
