STL基础
queue队列
| 头文件: <queue> |
| 定义: queue<T> q |
| 入队: q.push(x) |
| 查看队首元素: q.front() |
| 出队: q.pop() |
| 获取大小: q.size() |
stack栈
| 头文件: <stack> |
| 定义: stack<T> st |
| 插入: st.push(x) |
| 查看栈顶元素: st.top() |
| 弹出栈顶元素: st.pop() |
| 获取大小: st.size() |
vector向量
| 头文件: <vector> |
| 定义: vector<T> vec |
| 插入: vec.push_back(x) |
| 随机访问: vec[i] |
| 获取大小: vec.size() |
string字符串
| 头文件: <string> |
| 定义: string s |
| 插入: s.push_back(x) |
| 随机访问: s[i] |
| 反转: reverse(s.begin(),s.end()) |
| 取字串: |
| (1)string sub=s.substr(i,len); |
| (2)string sub=s.substr(i) |
| 查找: s.find(c) |
| (1)找到了: 返回c在s的下标 |
| (2)没找到: 返回参数std::string::npos |
| 删除: |
| (1)s.erase(i,len) |
| (2)s.erase(i) |
| 获取大小: s.size() |
map映射
| 头文件: <map> |
| 定义: map<T,T> mp |
| 赋值: mp[x]=y |
| 取值: mp[x] |
| 查找键为x: mp.find(x) |
| (1)找到了:返回对应迭代器 |
| (2)没找到: 返回mp.end() |
| 键: it->first / it.first |
| 值: it->second / it.second |
| 删除: mp.erase(it) |
| 检查非空: mp.empty() |
multimap映射
| 头文件: <map> |
| 定义: multimap<T,T> mp |
| 赋值: mp.insert(make_pair(x,y)) |
| 查找: mp.find(x) |
| 键为x的所有值: |
| auto lb=lower_bound(mp.begin(),mp.end()) |
| auto ub=upper_bound(mp.begin(),mp.end()) |
| for(auto it=lb;it!=ub;++it) ... |
| 查找键为x: mp.find(x) |
| (1)找到了:返回对应迭代器 |
| (2)没找到: 返回mp.end() |
| 查找键为x的元素个数: mp.count(x) |
| 删除 |
| (1)按键删除(多删): mp.erase(x) |
| (2)按迭代器删除(单删): mp.erase(mp.find(x)) |
unordered_map无序映射
| 头文件: <unordered_map> |
| 定义: unordered_map<T,T> mp |
| |
| |
| |
set,multiset集合
| *不支持随机访问(下标) |
| 头文件:<set>,<multiset> |
| 定义: set<T> st |
| 插入: st.emplace(x)或st.insert(x) |
| 删除: st.erase(x) |
| 清空: st.clear() |
| 获取大小: st.size() |
| 查找: st.find(x) |
| 出现次数: st.count(x) |
| 前一个迭代器: prev(it) |
| 后一个迭代器: next(it) |
| 前往后遍历: |
| for(set<T>::iterator it=st.begin();it!=st.end();++it){...} |
| 后往前遍历: |
| for(set<T>::reverse_iterator it=st.rbegin();it!=st.rend();++it){...} |
| 查找第一个大于等于x的元素: |
| set<T>::iterator it= lower_bound(st.begin(),st.end(),x) |
| 查找第一个大于x的元素: |
| set<T>::iterator it= upper_bound(st.begin(),st.end(),x) |
| multiset的删除: |
| 删除一个值x的所有元素: st.erase(x); |
| 一个值x仅删除一个元素: st.erase(st.find(x)); |
deque双端队列
| 头文件:<deque> |
| 定义: deque<T> q |
| 队首插入: q.push_front(x) |
| 队尾插入: q.push_back(x) |
| 队首删除: q.pop_front(x) |
| 队尾删除: q.pop_back(x) |
| 获取队首元素: q.front() |
| 获取队尾元素: q.back() |
priority_queue堆
| 头文件:<queue> |
| 定义: |
| (1)大根堆(默认):priority_queue<T> q |
| (2)小根堆:priority_queue<T,vector<T>,greater<T>> q //greater后面没有() |
| 插入: q.push(x) //O(logn) |
| 查看最值: q.top() //O(1) |
| 弹出最值: q.pop() //O(logn) |
| 获取大小: q.size() //O(1) |
| |
补充: 结构体小根堆
| struct info{ |
| ll x; |
| ll y; |
| bool operator>(const info & o)const { |
| if(x==o.x){ |
| return y>o.y; |
| } |
| return x>o.x; |
| } |
| }; |
| priority_queue<info,vector<info>,greater<info> > q; |
| |
| |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了