算法笔记 --第6章 C++标准模板库(STL)介绍

这里写图片描述

读书笔记

vector

vector是可以变长的数组。即它是以连续的空间存储元素,而且可以改变size。好用到爆炸

定义

s t d :: v e c t o r < t y p e n a m e > n a m e

typename是类型命,name是标识符。

访问元素

下标访问

这里写图片描述

迭代器访问

迭代器就用auto来定义类型
这里写图片描述

修改

这里写图片描述

容量

这里写图片描述



string

string。字符串。非常好用,内置函数操作很多,会极大方便编程,但是也要多用来熟悉这些。

定义

s t r i n g       n a m e

name是标识符

下标访问

这里写图片描述

迭代器

这里写图片描述

修改

这里写图片描述

容量

这里写图片描述

操作

下面的relational operators是 比较比较运算符>,<,>=,<=,==
这里写图片描述

more操作

string::nops 是作为find函数失配的返回值。在int里是-1,在unsigned里是max.
这里写图片描述



set

set:集合。是一个内部自动有序且不含重复元素的容器。

定义set

s t d :: s e t < t y p e n a m e > n a m e

typename是类型命,name是标识符

迭代器

这里写图片描述

容量

这里写图片描述

修改

erase既可以用迭代器作为参数,也可以用元素的值作为参数
这里写图片描述

查找

这里写图片描述



map

map:是一类存储key ->value映射的容器 。map是按key值排序存储的。且只能一个key对应一个值

map定义

s t d :: m a p < t y p e n a m e 1 , t y p e n a m e 2 > n a m e

typename1是key类型,typename2是value类型,name是标识符

key值访问

这里写图片描述

迭代器

这里写图片描述

容量

这里写图片描述

修改

这里写图片描述

查找

这里写图片描述



stack

stack 栈:后进先出

定义

s t d :: s t a c k < t y p e n a m e > n a m e

typename 类型名,name是标识符

操作

push 添加元素进栈
top 查看栈顶元素
pop 弹出栈顶元素




queue

queue队列:先进先出

定义

s t d :: q u e u e < t y p e n a m e > n a m e

typename是类型名,name是标识符

操作

front 访问队首元素
back 访问队尾元素


push 添加元素
pop 从队首弹出元素
这里写图片描述

priority_queue

priority_queue优先队列,可以定义优先级的队列

priorority_queue 定义

t e m p l a t e < c l a s s T , c l a s s   C o n t a i n e r = v e c t o r < T > , c l a s s   C o m p a r e = l e s s < t y p e n a m e   C o n t a i n e r :: v a l u e _ t y p e >> c l a s s   p r i o r i t y _ q u e u e ;

class T容器装的元素类型名
class Container 承载底层数据结构heap,默认是vector
class Compare第一个参数的比较类,默认是less

操作

push 进队
pop出队
top 查看队首元素




pair

pair拥有一对值,可以当作结构体用哦

pair 定义

s t d :: p a i r < t y p e n a m e 1 , t y p e n a m e 2 > n a m e

typename1 first类型名
typename2 second类型名
name 标识符

pair操作

访问pair : first ,second
比较pair :先比较first,再比较second



algorithm

max(),min(),abs()

max(x,y)返回x,y中最大值
min(x,y)返回x,y中最小值
abs(x)(in stdlib.h) 返回x(整型变量,int,long,long long)的绝对值

swap

swap(x,y)交换两元素

reverse

reverse(it1.it2)反转it1到it2之间的元素。

next_permutation

next_permutation(container)给出序列在全排列下的下一个序列。
next_permulation在没有下一个序列是会返回false

fill

fill(it1,it2,value)给容器it1到it2填充value

sort

sort(it1,it2,cmp)
如果,没有填cmp函数,且元素是可比较大小的,则按从小到大排序

// 从大到小
bool cmp(int a,int b){
    return a>b;
}
//从小到大
bool cmp(int a,int b){
    return a<b;
}

cmp一定要有健全的返回值。即无论是什么输入,都要返回true或false。

lower_bound,upper_bound

这两个函数一定要在有序容器类使用
lower_bound(first,last,val) 寻找[first,last)中第一个大于等于val的位置
upper_bound(first,last,val) 寻找[first,last)中第一个大于 val的位置
code:

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int a[10]={1,2,2,3,3,3,5,5,5,5};
    int *lowerpos =lower_bound(a,a+10,-1);
    int *upperpos=upper_bound(a,a+10,-1);
    printf("%d %d\n",lowerpos-a,upperpos-a);

    lowerpos = lower_bound(a,a+10,1);
    upperpos = upper_bound(a,a+10,1);
    printf("%d %d\n",lowerpos-a,upperpos-a);

    lowerpos = lower_bound(a,a+10,3);
    upperpos = upper_bound(a,a+10,3);
    printf("%d %d\n",lowerpos-a,upperpos-a);

    lowerpos = lower_bound(a,a+10,4);
    upperpos = upper_bound(a,a+10,4);
    printf("%d %d\n",lowerpos-a,upperpos-a);    

    lowerpos = lower_bound(a,a+10,6);
    upperpos = upper_bound(a,a+10,6);
    printf("%d %d\n",lowerpos-a,upperpos-a);
}
/*
* 0,0
* 0,1
* 3,6
* 6,6
* 10,10
*/




完结撒花d=====( ̄▽ ̄*)b

这章没什么值得记载的,学STL还是要看C++ Primer.所以我只贴了贴图,
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41256413/article/details/81676637
今日推荐