【ACWING】STL简单教程
目录
0 概述
- vector,变长数组,倍增思想:每次数组长度不够,就开一个2倍长度的新空间,然后原来的元素copy到新空间
倍增思想有一个好处,就是申请空间越频繁,效率越高
-
string 字符串, substr(), c_str()
-
queue, 队列,push(),front(),pop()
-
priority_queue, 优先队列(堆),默认大根堆
- push()
- top() 输出堆顶元素
- pop()弹出堆顶元素
-
stack,栈,push(),top(),pop()
-
deque,双端队列
-
set,map,multiset,multimap 基于红黑树,动态维护有序序列
-
unordered_set, unordered_map, unordered_multiset, unordered_multimap 基于哈希表实现
-
bitset 压位
// 所有容器都有这两个函数,且为O(1)时间复杂度 a.size() //求当前已有的元素大小 a.empty() //判空 a.clear() // 注意,队列、栈没有
1 vecotr
- size()
- empty()
- clear()
- front() / back() 返回第一个/最后一个数
- push_back()/pop_back()
- begin()/end()
- [] 支持随机寻址
- 支持比较运算,按字典序比较
2 pair
支持比较大小,字典序
pair<int,string> p; p = make_pair(10,"cjy"); p = {20 ,"cjy"}; //取元素 cout<< p.first <<endl; cout<< p.second
3 string
- size(),empty(),clear()
- substr()
a.substr(1,3)
->a字符串从1开始取3个长度的子串,相当于a[1,3]
左闭右闭的切片 - c_str() 返回字符串首址
4 queue
- push(),size(),empty(),front(),back(),pop()
- 队列没有clear函数,只能新建一个空队列覆盖原来的q
queue<int> q; q = queue<int>();
5 priority_queue
- push()
- pop() 弹出堆顶元素
- top() 返回堆顶元素
默认大根堆,如何变成小根堆
priority_queue<int> heap; heap.push(-x); //插入的数取负号 //法2,直接定义小根堆 priority_queue<int,vector<int>,greater<int>> heap; // 高优先级的先进队,但是优先队列是
6 stack
- push(), pop(), top()
7 deque 双端队列
加强版vector,但是用的不多(慢)
- size(), empty(),clear()
- front()/back() 返回元素
- push_back()/ pop_back()
- push_front()/pop_front()
- begin()/end()
- []
8 set/multiset
set不允许有重复元素,multiset允许有重复元素
- size(), empty(), clear()
- insert() 插入一个数
- find() 查找一个数,找不到就返回end迭代器
- count() 统计某个数的个数
- erase()
- 如果输入是x,那么就删除其中所有的x -----复杂度O(k + logn)
- 如果输入一个迭代器,那么就删除迭代器
下面两个和排序有关
- lower_bound()/upper_bound : 最小下界/最大上界 的迭代器,找不到就返回end迭代器
- ++,-- 返回后继/前驱 的数 -------复杂度O(logn)
9 map/mutimap
一个映射,相当于字典 以pair形式输入
- insert() ---- 插入的数是pair
- erase() ---输入迭代器orpair
- find()
- [],类似python那样字典进行索引,但是时间复杂度
O(logn)
- lower_bound() / upper_bound()
- ++,--
map<string,int> a; a["cjy"] = 1; cout<<a["cjy"]<<endl;
9.1 无序容器
unordered_map / unordered_set / unordered_multiset / unordered_multimap / 哈希表
绝大部分操作类似,但是增删改查时间复杂度O(1)
不支持lower_bound/upper_bound/ 迭代器++,--
10 bitset 压位
C++中一个bool类型是1byte,也就是8bit,用压位存就是01数组,可以节省8倍空间
// 初始化 bitset<1000> s; //非常不同,<这里存压位大小,而不是类型> // 支持所有位运算 ~s, &s, ^s, |s >> , << // 关系运算符 == , != // 取出某一位 s[] // 一些函数 cout() //返回有多少个1 any() // 判断是否至少有一个1 none() //判断是否有全为0 set() //所有位置1 set(k,v) //将第K位置为v reset() //所有位置0 flip() //所有位取反 flip(K) //k位取反
分类:
算法 / ACWING算法基础课
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步