关于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初探的更多相关文章

  1. C++模板之Vector与STL初探

    STL源码初步接触 STL = Standard Template Library,直译过来是:标准模板库,是惠普实验室开发的一系列软件的统称.从根本上说,STL是一些"容器"的集 ...

  2. C++ STL 初探

    学过C++的人肯定会很熟悉STL标准模板库,STL其实就是封装了一系列的接口,供我们调用.很多函数或者算法的实现不需要我们从头开始写,大大提高我们的编程效率.这篇博客在简单介绍STL的情况下,会详细的 ...

  3. c++ STL容器初探

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  4. 初探STL之算法

    算法 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包括头文件<algor ...

  5. 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探

    本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...

  6. nginx平台初探(100%)

    http://tengine.taobao.org/book/chapter_02.html 初探nginx架构(100%)¶ 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么 ...

  7. nginx -- nginx平台初探(100%)

    初探nginx架构(100%) 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在un ...

  8. A*寻路初探(转载)

    启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...

  9. stl::iterator汇总

    STL——iterator 一.概述Iterator(迭代器)模式又称Cursor(游标)模式, 根据STL中的分类,iterator包括:Input Iterator:只能单步向前迭代元素,不允许修 ...

随机推荐

  1. pyqt5-字体,颜色选择对话框设置label标签字体颜色样式

    1.采用实例方法,先创建2个dialog对象,采用该对象的信号触发相应的操作 import sys from PyQt5.Qt import * class MyWidget(QWidget): de ...

  2. beego控制器介绍

    控制器介绍 提示:在 v1.6 中,此文档所涉及的 API 有重大变更,this.ServeJson() 更改为 this.ServeJSON(),this.TplNames 更改为 this.Tpl ...

  3. JDBC连接数据库的7个步骤

    1.JDBC所需的四个参数username.password.url.driverClass 2.加载JDBC驱动程序 3.创建数据库连接connection对象conn 4.创建preparedSt ...

  4. 已知float后几位,谋几位保留

    设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式____. #include "common.h" #includ ...

  5. 2级搭建类202-Oracle 18c SI ASM 静默搭建(OEL7.7)公开

    Oracle 18c 单实例 ASM UDEV 方式在 OEL 7.7 上的安装

  6. Oracle Solaris 10 重启后提示 Bad PBR sig

    Solaris 10 安装完毕重启后提示 Bad PBR sig 在磁盘分区的时候,默认自带的 overlap 不要删除,否则启动报错. 分区时,保留overlap(默认显示总容量大小)分区.安装操作 ...

  7. jQuery---京东轮播图

    京东轮播图 有个计数的,点右边,计数增加,判断计数是否超过总的长度,超过设置计数为0,再设置当前的图片动画,兄弟的图片动画 左边点击同理,计数是--,判断计数是否等于-1,等于则reset计数为总长度 ...

  8. SpringBoot之Configuration

      在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性.并且在注解类中的类方法中可 ...

  9. Codeforces Round #350 (Div. 2)(670C)

    今天对着算法进阶指南,学了一下离散化.大概对桶排这样的算法优化比较好吧. 离散化:就是把无穷大的集合中若干个元素映射为有限集合以便于统计的方法.例如在很多时候,问题范围定义为整数集合Z,但涉及的元素只 ...

  10. 题解【洛谷P3406】海底高铁

    题面 比较基础的前缀和+差分. 注意开\(\text{long long}\) 直接上代码吧. #include <bits/stdc++.h> #define itn int #defi ...