news 2026/1/30 4:29:10

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/1/18 3:07:55

AirSim无人机仿真环境搭建:3步快速部署完整指南

AirSim无人机仿真环境搭建&#xff1a;3步快速部署完整指南 【免费下载链接】AirSim microsoft/AirSim: 一个基于 Unreal Engine 的无人机仿真平台&#xff0c;支持多平台、多无人机仿真和虚拟现实&#xff0c;适合用于实现无人机仿真和应用。 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/1/26 3:03:03

Walt插件系统终极指南:从零构建可扩展的WebAssembly编译器

Walt插件系统终极指南&#xff1a;从零构建可扩展的WebAssembly编译器 【免费下载链接】walt :zap: Walt is a JavaScript-like syntax for WebAssembly text format :zap: 项目地址: https://gitcode.com/gh_mirrors/wa/walt WebAssembly作为新一代的Web技术标准&#…

作者头像 李华
网站建设 2026/1/22 10:52:25

模型微调指南:基于自有数据优化识别效果

模型微调指南&#xff1a;基于自有数据优化识别效果 引言&#xff1a;为什么需要模型微调&#xff1f; 在实际业务场景中&#xff0c;通用预训练模型虽然具备广泛的识别能力&#xff0c;但在特定领域或特定对象上的表现往往不尽如人意。例如&#xff0c;“万物识别-中文-通用领…

作者头像 李华
网站建设 2026/1/25 18:59:59

医疗时序用Kats稳预测

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 医疗时序数据的稳健预测&#xff1a;Kats库在精准医疗中的创新应用目录医疗时序数据的稳健预测&#xff1a;Kats库在精准医疗中的创新应用 引言&#xff1a;医疗时序预测的痛点与机遇 一、问题与挑战&#xff1a;医疗时序…

作者头像 李华
网站建设 2026/1/24 22:18:07

MGeo模型对新建楼盘地址的快速学习能力

MGeo模型对新建楼盘地址的快速学习能力 引言&#xff1a;为何需要高效的中文地址相似度识别&#xff1f; 在城市化进程不断加速的背景下&#xff0c;新建楼盘如雨后春笋般涌现。这些新地址往往缺乏历史数据支撑&#xff0c;难以与现有地图或数据库中的标准地址进行精准匹配。传…

作者头像 李华
网站建设 2026/1/24 23:35:46

CosyVoice语音合成实战指南:零基础3步搞定多语言语音生成

CosyVoice语音合成实战指南&#xff1a;零基础3步搞定多语言语音生成 【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice…

作者头像 李华