读书笔记
vector
vector是可以变长的数组。即它是以连续的空间存储元素,而且可以改变size。好用到爆炸
定义
typename是类型命,name是标识符。
访问元素
下标访问
迭代器访问
迭代器就用auto来定义类型
修改
容量
string
string。字符串。非常好用,内置函数操作很多,会极大方便编程,但是也要多用来熟悉这些。
定义
name是标识符
下标访问
迭代器
修改
容量
操作
下面的relational operators是 比较比较运算符>,<,>=,<=,==
more操作
string::nops 是作为find函数失配的返回值。在int里是-1,在unsigned里是max.
set
set:集合。是一个内部自动有序且不含重复元素的容器。
定义set
typename是类型命,name是标识符
迭代器
容量
修改
erase既可以用迭代器作为参数,也可以用元素的值作为参数
查找
map
map:是一类存储key ->value映射的容器 。map是按key值排序存储的。且只能一个key对应一个值
map定义
typename1是key类型,typename2是value类型,name是标识符
key值访问
迭代器
容量
修改
查找
stack
stack 栈:后进先出
定义
typename 类型名,name是标识符
操作
push 添加元素进栈
top 查看栈顶元素
pop 弹出栈顶元素
queue
queue队列:先进先出
定义
typename是类型名,name是标识符
操作
front 访问队首元素
back 访问队尾元素
push 添加元素
pop 从队首弹出元素
priority_queue
priority_queue优先队列,可以定义优先级的队列
priorority_queue 定义
class T容器装的元素类型名
class Container 承载底层数据结构heap,默认是vector
class Compare第一个参数的比较类,默认是less
操作
push 进队
pop出队
top 查看队首元素
pair
pair拥有一对值,可以当作结构体用哦
pair 定义
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.所以我只贴了贴图,