关于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. webservice之Http传输错误问题

    1.背景:调用第三方webservice服务,正常调用,但是最近由于第三方更换远程调用地址,并且发布服务器(A)是通过代理的方式请求真实服务器地址(B),于是本以为很简单的将客户端调用地址修改为发布地 ...

  2. jQuery笔记(三)jQuery中的事件

    ; padding:0;} body { font-size:13px; line-height:130%; padding:60px;} #panel { width:300px; border:1 ...

  3. 怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

    Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. T ...

  4. Pikachu-File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...

  5. 141.内置上下文处理器debug、request、auth、messages、media、static、csrf

    上下文处理器 上下文处理器可以返回一些数据,在全局模板中都可以使用,比如登录后的用户数据,在很多页面中都需要使用,那么我们就可以方在上下文处理器中,就没有必要在每个视图中返回这个对象了. 在setti ...

  6. JavaSE学习笔记(1)---数据类型、运算符、控制结构

    javaSE学习笔记(1) 数据类型和运算符 1.注释可以提高程序的可读性.可划分为 单行注释 // 多行注释 /.../ 文档注释 /**...*/ 2.标识符的命名规则: 标识符必须以字母.下划线 ...

  7. Vue组件库新增的prop属性类型是Object或者Array时默认值的设置

    在Vue开发中提供组件库时常常需要添加相关属性,用来接收父组件向子组件传递的数据,通常也会给属性设置默认值,那么当属性的类型是Object或者Array类型时如何设置默认值比较合理呢?下面将揭晓这一过 ...

  8. CR(Code Review)代码评审如何发挥作用

    在CODE中经常会发起代码评审和进行评审任务,可是根据目前的做法流程,我认为它就是走走形式,为了应付检查,根本没有达到预期的效果,即审查代码质量.学习他人写的代码和提高自身写代码的能力.对此,将从两方 ...

  9. 第一章 - HTTP概述

    1.1 HTTP——因特网的多媒体信使 可靠的数据传输协议 1.2 Web客户端和服务器 Web内容都是存储在Web服务器上的,使用HTTP协议,因此也称为HTTP服务器 HTTP客户端发出请求,提供 ...

  10. 02-SV数据类型

    1.数据类型 内建数据类型:逻辑(logic)类型.双状态数据类型(bit,byte,shortint,int,longint).四状态数据类型(integer,time,real) 其他:定宽数组. ...