前言
呃……由于昨天写的那篇文章太lan了,于是!我把它删了。
啊,不要在意这些细节,今天我决定,重新写一篇文章,和大家好好扯一扯C++中的STL。
简介
标准模板库(Standard Template Library,STL),是C++中添加的一个巨型模板库,其中有许多的功能、函数、容器被加入,使得像我这种C++党的人们写代码变得更加方便。(啊,python党和Java党的就别看了啊,直接关掉吧。)
STL一般分为六个部分:容器,函数,迭代器,仿函数,其余两个我就不细说了,因为不常用。
容器
STL中的容器一般分为这些:
- 常用容器:string(这个不完全算容器),vector
- 队列型容器:stack,queue,deque
- 特殊数据结构型容器:priority_ueue(堆),map(红黑树),unordered_map(哈希表),list(链表)
- 其他容器:pair,set,unordered_set
- 不常用容器:array,tuple
后面我会一一介绍这些容器,今天来简介一下吧。
string:字符串类型,代替了字符数组,内置功能强大,STL基础容器之一。
vector:动态数组,使用简单,内置功能多,有些场景下可代替数组。
stack:栈,是一种先进后出(First In Last Out,FILO)型容器,在程序递归时被编译器使用,可辅助深度优先搜索。
queue:队列,是一种先进先出(First In First Out,FIFO)型容器,可辅助广度优先搜索,用途比较广泛。
deque:双端队列,可在队列两端操作,和list相近,但构造不同。
priority_queue:优先队列,插入时自动排序,可设置排序方式,内部由堆实现。
map:映射,类似python中的字典,有键和值两个参数,插入时自动去重并排序,内部有红黑树实现。
unorded_map:特殊映射,插入时不排序但去重,与map类似,内部由哈希表实现。
list:双向链表,和deque相似,可对两端进行操作。
pair:是一个二元组,内部为一个结构体,可代替struct定义的二元组。
set:集合,插入时自动去重并排序,有些时候可简化一些需要多次排序的情况。
unordered_set:集合,插入时自动去重但不排序,在特殊的情况时可替换set。
array:数组,和vector相似,其他不解释。
tuple:元组,和python中的元组类似,由于不常用,所以不多解释。
常用函数
sort(first,last,comp); //排序,内部为快速排序
next_permutation(first,last); //全排列,内部为dfs
binary_search(array,target); //二分查找
*max_element(arr1,arr2,comp); //数组比较最大值
*min_element(arr1,arr2,comp); //数组比较最小值
swap(a,b); //交换a,b的值
reverse(arr); //反转容器
max(a,b); //取a,b的最大值
min(a,b); //取a,b的最小值
unique(arr); //将数组arr伪去重,将重复的值放在数组后面
我总结了最常用的函数,其他没写出来。
仿函数
greater<int>(); //大于
less<int>(); //小于
equal_to<int>(); //等于
not_equal_to<int>(); //不等于
greater_equal_to<int>(); //大于等于
less_equal_to<int>(); //小于等于
仿函数一般用于sort排序中__comp参数中代替自己写cmp函数用的,其他……用处不大。
结语
呃……迭代器没有具体的用法和功能,它是一个大的概括,所以我就不再具体介绍了。
今天就到这里,我们下期见!