news 2026/4/16 17:26:59

stl常用语句总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
stl常用语句总结

一、vector(动态数组)

函数名功能说明
insert在指定位置插入元素
push_back向容器末端插入元素
erase删除指定位置 / 范围的元素
size返回当前元素个数
max_size返回容器最大可存储元素个数
capacity返回当前容器实际分配的容量
[]下标访问元素(无越界检查)
int main() { vector<int> v; // 定义vector对象 v.insert(v.begin(), 1); // 在开头插入1 → v: [1] v.insert(v.end(), 2); // 在末尾插入2 → v: [1,2] v.push_back(3); // 末尾插入3 → v: [1,2,3] v.insert(v.begin()+1, 4); // 在第2个位置插入4 → v: [1,4,2,3] v.erase(v.begin()+2); // 删除第3个元素 → v: [1,4,3] // 输出所有元素 for (int i=0; i<v.size(); i++) { cout << v[i] << " "; // 输出:1 4 3 } cout << endl; cout << "size: " << v.size() << endl; // 输出:3 cout << "max_size: " << v.max_size() << endl; // 输出容器最大容量 cout << "capacity: " << v.capacity() << endl; // 输出当前分配的容量 return 0; }

二、array(固定大小数组)

函数名功能说明
at访问指定下标元素(有越界检查)
front返回首元素引用
back返回尾元素引用
fill用指定值填充所有元素
size返回固定大小(编译期确定)
empty判断是否为空(固定大小下恒为 false)
int main() { array<int, 3> arr = {10, 20, 30}; // 定义固定大小为3的array cout << "at(1): " << arr.at(1) << endl; // 访问下标1 → 20 cout << "front: " << arr.front() << endl; // 首元素 → 10 cout << "back: " << arr.back() << endl; // 尾元素 → 30 arr.fill(0); // 所有元素填充为0 → arr: [0,0,0] for (int num : arr) { cout << num << " "; // 输出:0 0 0 } cout << "\nsize: " << arr.size() << endl; // 输出:3 return 0; }

三、list(双向链表)

函数名功能说明
push_front向链表头部插入元素
push_back向链表尾部插入元素
insert在指定迭代器位置插入元素
erase删除指定迭代器位置的元素
reverse反转链表
sort对链表元素排序(list 自带 sort)
int main() { list<int> lst; lst.push_front(2); // 头部插入2 → lst: [2] lst.push_back(3); // 尾部插入3 → lst: [2,3] auto it = lst.begin(); lst.insert(++it, 1); // 在第2个位置插入1 → lst: [2,1,3] lst.erase(lst.begin()); // 删除首元素 → lst: [1,3] lst.reverse(); // 反转 → lst: [3,1] lst.sort(); // 升序排序 → lst: [1,3] for (int num : lst) { cout << num << " "; // 输出:1 3 } return 0; }

四、set(无重复有序集合)

函数名功能说明
insert插入元素(自动去重 + 排序)
find查找元素,返回迭代器(不存在则返回 end ())
count统计元素个数(0 或 1)
erase删除指定元素 / 迭代器位置元素
int main() { set<int> s; s.insert(5); s.insert(3); s.insert(5); // 重复元素,不会插入 → s: [3,5] auto it = s.find(3); if (it != s.end()) { cout << "找到元素:" << *it << endl; // 输出:找到元素:3 } cout << "元素5的个数:" << s.count(5) << endl; // 输出:1 s.erase(3); // 删除元素3 → s: [5] for (int num : s) { cout << num << " "; // 输出:5 } return 0; }

五、multiset(可重复有序集合)

函数名功能说明
insert插入元素(允许重复 + 排序)
find查找第一个匹配元素的迭代器
count统计元素出现的次数
erase删除所有匹配元素 / 单个迭代器元素
int main() { multiset<int, greater<int>> ms; // 降序排序 ms.insert(5); ms.insert(3); ms.insert(5); // 允许重复 → ms: [5,5,3] cout << "元素5的次数:" << ms.count(5) << endl; // 输出:2 auto it = ms.find(5); ms.erase(it); // 删除第一个5 → ms: [5,3] for (int num : ms) { cout << num << " "; // 输出:5 3 } return 0; }

六、迭代器(容器通用访问工具)

迭代器类型功能说明
iterator可读可写,遍历容器
const_iterator只读,遍历容器
reverse_iterator反向遍历(从尾到头)
begin()/end()返回正向迭代器的首尾
cbegin()/cend()返回常量正向迭代器的首尾
rbegin()/rend()返回反向迭代器的首尾
int main() { vector<int> v = {1,2,3}; // 普通迭代器(读写) vector<int>::iterator it = v.begin(); *it = 10; // 修改首元素 → v: [10,2,3] // 常量迭代器(只读) vector<int>::const_iterator cit = v.cbegin(); cout << "const迭代器访问:" << *cit << endl; // 输出:10 // 反向迭代器(从尾到头) vector<int>::reverse_iterator rit = v.rbegin(); cout << "反向迭代器第一个元素:" << *rit << endl; // 输出:3 return 0; }

七、容器适配器(stack/queue/priority_queue)

容器适配器是基于其他容器(如 deque)封装的 “包装器”,提供特定的操作接口。

1. stack(栈:后进先出)
函数名功能说明
push向栈顶压入元素
pop弹出栈顶元素(无返回值)
top返回栈顶元素的引用
size返回栈中元素个数
empty判断栈是否为空
int main() { stack<int> st; st.push(10); // 压入10 → 栈:[10] st.push(20); // 压入20 → 栈:[10,20] st.push(30); // 压入30 → 栈:[10,20,30] cout << "栈顶元素:" << st.top() << endl; // 输出:30 st.pop(); // 弹出栈顶 → 栈:[10,20] cout << "弹出后栈顶:" << st.top() << endl; // 输出:20 cout << "栈大小:" << st.size() << endl; // 输出:2 return 0; }
2. queue(队列:先进先出)
函数名功能说明
push向队尾插入元素
pop弹出队首元素(无返回值)
front返回队首元素的引用
back返回队尾元素的引用
size返回队列中元素个数
empty判断队列是否为空
int main() { queue<int> q; q.push(10); // 队尾插入10 → 队列:[10] q.push(20); // 队尾插入20 → 队列:[10,20] q.push(30); // 队尾插入30 → 队列:[10,20,30] cout << "队首:" << q.front() << endl; // 输出:10 cout << "队尾:" << q.back() << endl; // 输出:30 q.pop(); // 弹出队首 → 队列:[20,30] cout << "弹出后队首:" << q.front() << endl; // 输出:20 return 0; }
3. priority_queue(优先队列:默认大顶堆)
函数名功能说明
push插入元素(自动排序,默认大顶堆)
pop弹出堆顶元素(无返回值)
top返回堆顶元素的引用
size返回队列中元素个数
empty判断队列是否为空
int main() { // 默认大顶堆(最大值在堆顶) priority_queue<int> pq; pq.push(20); pq.push(10); pq.push(30); // 插入后自动排序 → 堆顶:30 cout << "堆顶元素:" << pq.top() << endl; // 输出:30 pq.pop(); // 弹出堆顶 → 新堆顶:20 cout << "弹出后堆顶:" << pq.top() << endl; // 输出:20 // 小顶堆(最小值在堆顶) priority_queue<int, vector<int>, greater<int>> pq_min; pq_min.push(20); pq_min.push(10); pq_min.push(30); cout << "小顶堆堆顶:" << pq_min.top() << endl; // 输出:10 return 0; }

八、map(键值对,有序无重复键)

函数名功能说明
[]通过键访问 / 修改值(键不存在则插入)
insert插入键值对(pair<Key,Value>
find查找键,返回迭代器(不存在则返回 end ())
count统计键的个数(0 或 1)
erase删除指定键 / 迭代器位置的键值对
first迭代器访问键(it->first
second迭代器访问值(it->second
int main() { map<string, int> score; // 键:姓名,值:分数 score["张三"] = 90; // 插入键值对 → {"张三":90} score.insert(pair<string, int>("李四", 85)); // 插入 → {"李四":85} cout << "张三的分数:" << score["张三"] << endl; // 输出:90 // 遍历键值对 for (auto it = score.begin(); it != score.end(); it++) { cout << it->first << ": " << it->second << endl; // 输出:李四:85 张三:90(默认按键升序) } auto it = score.find("李四"); if (it != score.end()) { score.erase(it); // 删除"李四" } cout << "删除后size:" << score.size() << endl; // 输出:1 return 0; }

九、multimap(键值对,有序可重复键)

函数名功能说明
insert插入键值对(允许重复键)
find查找第一个匹配键的迭代器
count统计键出现的次数
erase删除所有匹配键的键值对
int main() { multimap<string, string> course; // 键:姓名,值:课程 course.insert({"张三", "数学"}); course.insert({"张三", "英语"}); // 允许重复键 course.insert({"李四", "语文"}); cout << "张三的课程数:" << course.count("张三") << endl; // 输出:2 // 遍历张三的所有课程 auto range = course.equal_range("张三"); for (auto it = range.first; it != range.second; it++) { cout << it->first << ": " << it->second << endl; // 输出:张三:数学 张三:英语 } course.erase("张三"); // 删除所有"张三"的键值对 cout << "删除后size:" << course.size() << endl; // 输出:1 return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:00:09

Habitat-Sim物理引擎实战:从零构建逼真机器人交互环境

Habitat-Sim物理引擎实战&#xff1a;从零构建逼真机器人交互环境 【免费下载链接】habitat-sim A flexible, high-performance 3D simulator for Embodied AI research. 项目地址: https://gitcode.com/GitHub_Trending/ha/habitat-sim Habitat-Sim作为一款专为具身AI研…

作者头像 李华
网站建设 2026/4/16 3:01:28

DeepMind数学数据集:AI代数推理的革命性突破

DeepMind数学数据集&#xff1a;AI代数推理的革命性突破 【免费下载链接】mathematics_dataset This dataset code generates mathematical question and answer pairs, from a range of question types at roughly school-level difficulty. 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/4/16 15:54:14

DataEase前端性能优化实战指南:三步解决加载卡顿难题

DataEase前端性能优化实战指南&#xff1a;三步解决加载卡顿难题 【免费下载链接】dataease DataEase: 是一个开源的数据可视化分析工具&#xff0c;支持多种数据源以及丰富的图表类型。适合数据分析师和数据科学家快速创建数据可视化报表。 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/4/16 9:34:28

3步掌握Serial-Studio:嵌入式开发的终极可视化方案

3步掌握Serial-Studio&#xff1a;嵌入式开发的终极可视化方案 【免费下载链接】Serial-Studio Multi-purpose serial data visualization & processing program 项目地址: https://gitcode.com/GitHub_Trending/se/Serial-Studio 在嵌入式开发和物联网项目中&#…

作者头像 李华
网站建设 2026/4/16 14:17:10

构建现代化后台管理系统菜单架构:从设计到实现

构建现代化后台管理系统菜单架构&#xff1a;从设计到实现 【免费下载链接】vue3-element-admin &#x1f525;Vue3 Vite7 TypeScript Element-Plus 构建的后台管理前端模板&#xff0c;配套接口文档和后端源码&#xff0c;vue-element-admin 的 Vue3 版本。 项目地址: htt…

作者头像 李华