2021年啦!元旦快乐!

前几天扶苏让我们学STL,然后我就感觉STL是属于语法方面,就去cppreference上面看。结果发现cppreference上面的STL不仅分散,而且有好多东西都是我们用不到的。所以我就想写个博客整理一下STL方面的东西。

STL这东西有好多实现比较先进,随着人类的进化STL中的好多东西会被实现的越来越好,使用方法有时也会随之变化。所以这篇博客应该会随着C++的更新而更新。

目前C++版本:C++20。

关于STL容器前缀

multi

代表容器内部的元素可以重复。

unordered_

代表此容器基于哈希表,复杂度几乎为常数,但是内存占用较大。

unordered_multi

顾名思义,这是上两种特性的结合。

std::vector

首先当然是我们最最最基础的vector动态数组啦!

vector基础函数列表:

函数 作用
push_back 从最后加入一个元素
pop_back 弹出最后一个元素
clear 清空
size 总元素个数
empty 返回是否为空

由于vector可以直接下标访问,大部分函数都用不太到,这里就不再赘述了。

std::stack

一个栈。

函数 作用
push 从栈顶压入一个元素
pop 弹出栈顶元素
clear 清空
size 总元素个数
empty 返回是否为空

std::queue

一个队列。

函数 作用
push 从队尾加入一个元素
pop 弹出队首元素
clear 清空
size 总元素个数
empty 返回是否为空

std::deque

一个双端队列。

函数 作用
push_front 从队首加入一个元素
push_back 从队尾加入一个元素
pop_front 弹出队首元素
pop_back 弹出队尾元素
clear 清空
size 总元素个数
empty 返回是否为空

std::priority_queue

优先队列,也就是堆。是一个大根堆。

如果想使用小根堆可以这样:

1
std::priority_queue<int,vector<int>,greater<int> > Heap;
函数 作用
push(value) 加入一个元素
pop 弹顶
top 返回堆顶值
size 总元素个数
empty 返回是否为空

std::map

map家族有四个容器:map,unordered_map,multimap,unordered_multimap。区别上面有说。

map的内部实现是一棵红黑树,主要的功能是实现键值映射。

函数 作用
insert(value) 加入一个元素
clear 清空
size 总元素个数
empty 返回是否为空

map最最最大的一个优点,就是——它可以直接以像数组一样的方式访问它所对应的元素。这也就是说,你可以使用数字,浮点数,字符串,甚至于结构体来当做map的数组下标。

std::set

set家族也有四个容器:set,unordered_set,multiset,unordered_multiset。区别上面有说。

set的内部实现是一棵红黑树,主要的功能是实现查重。

函数 作用
insert(value) 加入一个元素
clear 清空
size 总元素个数
empty 返回是否为空
find(value) 指向键等于 key 的元素的迭代器。若找不到这种元素,则返回end()迭代器。
count 返回匹配特定键的元素数量

std::bitset

相当于一个布尔数组,可以使用数组下标访问。但是每一个元素只占用一bit。

函数 作用
set 将位置为true或者提供的值
reset 将位置为false
flip 翻转位的值
to_string 返回数据的字符串表示
to_ullong (C++11) 返回数据的unsigned long long整数表示