当前位置: 首页 > news >正文

C++ STL常用函数一览表(快速记忆版本)

C++ STL 常用数据结构与函数整理

这份笔记按常见 STL 容器分类整理,适合在刷题和复习时快速查阅。


1.vector

1.1 特点

  • 底层是动态数组
  • 支持随机访问
  • 尾部插入、删除效率高
  • 中间插入、删除效率低

1.2 常用定义

vector<int>v;vector<int>v(5);// 5 个 0vector<int>v(5,10);// 5 个 10vector<int>v2(v);// 拷贝vector<int>v={1,2,3};

1.3 常用函数

函数作用
v.size()返回元素个数
v.empty()判断是否为空
v.push_back(x)尾部插入
v.pop_back()删除最后一个元素
v.back()访问最后一个元素
v.front()访问第一个元素
v[i]访问下标为i的元素
v.at(i)访问下标为i的元素,越界会检查
v.clear()清空
v.begin()首元素迭代器
v.end()尾后迭代器
v.insert(pos, x)pos前插入
v.erase(pos)删除pos位置元素
v.erase(l, r)删除区间[l, r)
v.resize(n)调整大小
v.reserve(n)预留容量

1.4 常见写法

vector<int>v={3,1,4};v.push_back(10);v.pop_back();for(inti=0;i<(int)v.size();i++){cout<<v[i]<<" ";}for(intx:v){cout<<x<<" ";}

1.5 常用算法配合

sort(v.begin(),v.end());// 升序sort(v.begin(),v.end(),greater<int>());// 降序reverse(v.begin(),v.end());// 反转

2.deque

2.1 特点

  • 双端队列
  • 头尾都可以高效插入删除
  • 支持随机访问
  • 常用于单调队列、滑动窗口

2.2 常用定义

deque<int>dq;deque<int>dq={1,2,3};

2.3 常用函数

函数作用
dq.push_back(x)尾插
dq.push_front(x)头插
dq.pop_back()尾删
dq.pop_front()头删
dq.back()访问队尾
dq.front()访问队头
dq.size()元素个数
dq.empty()是否为空
dq.clear()清空
dq[i]随机访问

2.4 示例

deque<int>dq;dq.push_back(1);dq.push_front(2);cout<<dq.front()<<endl;cout<<dq.back()<<endl;

2.5 易错点

  • vector一样,访问前要确保非空
  • 虽然支持随机访问,但一般更常用在队头队尾操作

3.stack

3.1 特点

  • 栈,后进先出
  • 只能访问栈顶元素
  • 默认底层一般是deque

3.2 常用定义

stack<int>st;

3.3 常用函数

函数作用
st.push(x)入栈
st.pop()出栈
st.top()访问栈顶
st.size()元素个数
st.empty()是否为空

3.4 示例

stack<int>st;st.push(10);st.push(20);cout<<st.top()<<endl;// 20st.pop();

3.5 易错点

  • pop()没有返回值
  • 想取出栈顶元素要先top(),再pop()

4.queue

4.1 特点

  • 队列,先进先出
  • 只能访问队头和队尾
  • 常用于 BFS

4.2 常用定义

queue<int>q;

4.3 常用函数

函数作用
q.push(x)入队
q.pop()出队
q.front()访问队头
q.back()访问队尾
q.size()元素个数
q.empty()是否为空

4.4 示例

queue<int>q;q.push(1);q.push(2);cout<<q.front()<<endl;// 1q.pop();

4.5 易错点

  • pop()也没有返回值
  • 访问front()back()前要保证队列非空

5.priority_queue

5.1 特点

  • 优先队列,本质是堆
  • 默认是大根堆
  • 不能像普通容器那样遍历

5.2 常用定义

priority_queue<int>pq;// 大根堆

小根堆写法:

priority_queue<int,vector<int>,greater<int>>pq;

5.3 常用函数

函数作用
pq.push(x)插入元素
pq.pop()删除堆顶
pq.top()访问堆顶
pq.size()元素个数
pq.empty()是否为空

5.4 示例

priority_queue<int>pq;pq.push(3);pq.push(10);pq.push(5);cout<<pq.top()<<endl;// 10pq.pop();

5.5 易错点

  • 默认是大根堆,不是小根堆
  • pop()不返回堆顶元素
  • 如果要取最小值,记得用greater<int>

6.set

6.1 特点

  • 内部元素自动有序
  • 元素不重复
  • 底层一般是红黑树
  • 查找、插入、删除通常是O(log n)

6.2 常用定义

set<int>s;set<int>s={3,1,2};

6.3 常用函数

函数作用
s.insert(x)插入元素
s.erase(x)删除值为x的元素
s.find(x)查找元素,返回迭代器
s.count(x)是否存在,结果是01
s.size()元素个数
s.empty()是否为空
s.clear()清空
s.begin()指向最小元素
s.end()尾后迭代器
s.lower_bound(x)第一个大于等于x的位置
s.upper_bound(x)第一个大于x的位置

6.4 示例

set<int>s;s.insert(3);s.insert(1);s.insert(3);// 重复元素不会插入if(s.count(1)){cout<<"found"<<endl;}for(intx:s){cout<<x<<" ";}

6.5 易错点

  • set中元素不能通过迭代器直接修改
  • 元素会自动排序,不会保持插入顺序

7.unordered_set

7.1 特点

  • 无序集合
  • 元素不重复
  • 底层是哈希表
  • 平均查找、插入、删除是O(1)

7.2 常用定义

unordered_set<int>us;

7.3 常用函数

函数作用
us.insert(x)插入
us.erase(x)删除
us.find(x)查找
us.count(x)判断是否存在
us.size()元素个数
us.empty()是否为空
us.clear()清空

7.4 示例

unordered_set<int>us;us.insert(10);us.insert(20);if(us.find(10)!=us.end()){cout<<"yes"<<endl;}

7.5 易错点

  • 元素是无序的
  • 最坏情况下复杂度可能退化
  • 不能使用lower_bound()upper_bound()

8.map

8.1 特点

  • 键值对容器
  • 按 key 自动升序排列
  • key 不重复
  • 底层一般是红黑树

8.2 常用定义

map<string,int>mp;

8.3 常用函数

函数作用
mp[key]访问或插入 key 对应的值
mp.insert({key, value})插入键值对
mp.erase(key)删除 key
mp.find(key)查找 key
mp.count(key)判断 key 是否存在
mp.size()元素个数
mp.empty()是否为空
mp.clear()清空
mp.begin()首元素迭代器
mp.lower_bound(key)第一个大于等于 key 的位置
mp.upper_bound(key)第一个大于 key 的位置

8.4 示例

map<string,int>mp;mp["alice"]=95;mp["bob"]=88;cout<<mp["alice"]<<endl;for(auto[k,v]:mp){cout<<k<<" "<<v<<endl;}

8.5 易错点

  • mp[key]如果 key 不存在,会自动创建
  • 如果只是判断是否存在,优先用find()count()

9.unordered_map

9.1 特点

  • 无序键值对容器
  • key 不重复
  • 底层是哈希表
  • 平均复杂度接近O(1)

9.2 常用定义

unordered_map<string,int>ump;

9.3 常用函数

函数作用
ump[key]访问或插入
ump.insert({key, value})插入
ump.erase(key)删除
ump.find(key)查找
ump.count(key)判断是否存在
ump.size()元素个数
ump.empty()是否为空
ump.clear()清空

9.4 示例

unordered_map<string,int>ump;ump["cat"]=2;ump["dog"]=3;if(ump.count("cat")){cout<<ump["cat"]<<endl;}

9.5 易错点

  • 无序,遍历结果不固定
  • ump[key]也会自动创建新 key
  • 自定义类型做 key 时,通常需要自定义哈希函数

10. 常用遍历方式总结

10.1 下标遍历

适用于:vectordeque

for(inti=0;i<(int)v.size();i++){cout<<v[i]<<" ";}

10.2 范围for

适用于:大多数容器

for(intx:v){cout<<x<<" ";}

10.3 迭代器遍历

for(autoit=s.begin();it!=s.end();it++){cout<<*it<<" ";}

10.4 遍历map

for(autoit=mp.begin();it!=mp.end();it++){cout<<it->first<<" "<<it->second<<endl;}for(auto[k,v]:mp){cout<<k<<" "<<v<<endl;}

11. 常见使用场景速记

容器适合场景
vector最常用,存一组数据,支持随机访问
deque需要双端操作
stack括号匹配、单调栈、DFS 辅助
queueBFS、层序遍历
priority_queue堆、Top K、最值维护
set去重 + 有序
unordered_set快速去重、快速查找
map统计映射关系且需要有序
unordered_map计数、哈希映射、频率统计

12. 学 STL 时最值得记住的几点

12.1 先记“是否有序”

  • setmap是有序的
  • unordered_setunordered_map是无序的

12.2 先记“是否允许重复”

  • setunordered_set不允许重复
  • mapunordered_map的 key 不允许重复

12.3 先记“是否支持下标”

  • vectordeque支持下标
  • setmap不支持像数组那样按位置访问

12.4 先记“默认堆类型”

  • priority_queue默认是大根堆

12.5 先记“pop()是否返回值”

  • stackqueuepriority_queuepop()都没有返回值

13. 刷题最常用模板

13.1vector排序

vector<int>v={4,2,5,1};sort(v.begin(),v.end());

13.2unordered_map计数

unordered_map<int,int>cnt;for(intx:nums){cnt[x]++;}

13.3set去重

set<int>s(nums.begin(),nums.end());

13.4 小根堆

priority_queue<int,vector<int>,greater<int>>pq;

13.5 队列 BFS

queue<int>q;q.push(start);while(!q.empty()){intx=q.front();q.pop();}

http://www.jsqmd.com/news/855521/

相关文章:

  • 多模态协作:文本、图像、语音Agent配合
  • Odrive运动控制实战:用STM32的CAN总线读取电机位置和发送位置指令
  • Perplexity历史资料搜索效率提升300%:实测验证的5步精准检索法(附2024最新API调用参数)
  • 构建AI应用时如何借助Taotoken实现模型的灵活选型与降级
  • 《Linux系统编程》Linux基础开发工具 (三):从零实现动态进度条(附回车、换行与缓冲区详解)
  • TPU核心引擎的‘血管网络’:用RTL仿真动画可视化脉动阵列数据流
  • 顶尖销售都在读什么?这三本书揭示理解客户的奥秘
  • Rockchip设备USB通信协议解析:rkdeveloptool的3种高效调试模式实战指南
  • 动态关节镜导航系统在ACL重建手术中的应用与实现
  • 从芯片上电到Wi-Fi连接:手把手调试ESP32-S3启动全流程(附日志分析)
  • AOCODARC-F7MINI飞控固件编译踩坑记:从‘make arm_sdk_install’失败到成功编译
  • AI时代学习转型
  • 告别MIUI!用PixelExperience给小米8 SE刷上纯净安卓13,体验到底香不香?
  • 射灯轨道灯怎么选?看完这篇不花冤枉钱! 这几家射灯轨道灯公司靠谱吗?老师傅偷偷告诉你! 装修小白必看:射灯轨道灯避坑指南,这家公司口碑最好!
  • Flutter依赖管理完全指南:从pubspec到Flutter Pub
  • 2026年4月知名的增压器维修机构推荐,增压器维修机构哪家可靠,高压油泵修复,燃油喷射精准高效 - 品牌推荐师
  • C++中的六个函数
  • 2026年质量好的标识标牌高口碑品牌推荐 - 品牌宣传支持者
  • AI 写后端:如何让 AI 守住 Controller、Service、Mapper 的边界
  • 2026年新房墙面装修厂家性价比排行实测对比 - 优质品牌商家
  • 第一层级评论区正常
  • 2026中医养生馆厂家选型推荐:技术与服务核心维度解析 - 优质品牌商家
  • 从Linux内核到Android相机:手把手拆解V4L2框架的五个核心结构体
  • Python,Go,Rust开发企业上市流程培训库App
  • i.MX8M Plus调试问题:JTAG_MOD信号处理与解决方案
  • 乐山汽车低趴改装技术全解析:乐山汽车灯光改装/乐山汽车电器维修/乐山汽车维修保养/靠谱品牌筛选推荐 - 优质品牌商家
  • 答辩ppt模板资源合集
  • 2026年帝医时珍熏蒸权威品牌技术实力深度解析:东方熏道熏蒸/中医养生加盟/中药熏蒸太空舱/中药熏蒸床/优选指南 - 优质品牌商家
  • 只有被坑过才能真正懂,那AI行么?
  • 2026年比较好的成都标识标牌厂家哪家好 - 行业平台推荐