竞赛中常用的C++STL用法
目录​一、核心容器1. 序列式容器(1) vector动态数组(2) string字符串2. 关联式容器(1) map/unordered_map键值对(2) set/unordered_set集合3. 容器适配器专用场景(1) stack栈(2) queue队列(3) priority_queue优先队列 / 堆二、核心算法 头文件三、常用工具1. pair二元组2. bitset位集一、核心容器1. 序列式容器(1) vector动态数组竞赛中最常用的容器替代普通数组支持动态扩容随机访问效率高。#include vector #include algorithm using namespace std; int main() { // 1. 初始化 vectorint v1; // 空向量 vectorint v2(5, 0); // 5个元素初始值0 vectorint v3 {1, 3, 2, 5, 4}; // 直接初始化 // 2. 核心操作竞赛高频 v1.push_back(6); // 尾部添加元素O(1) 均摊 v1.pop_back(); // 尾部删除元素O(1) v1.size(); // 获取元素个数 v1.empty(); // 判断是否为空 v1.clear(); // 清空 // 3. 排序结合算法 sort(v3.begin(), v3.end()); // 升序排序默认 sort(v3.begin(), v3.end(), greaterint()); // 降序排序 // 4. 查找有序vector可用 if (binary_search(v3.begin(), v3.end(), 3)) { // 二分查找元素是否存在O(logn) } // 5. 遍历三种方式 for (int i 0; i v3.size(); i) {} // 下标遍历 for (auto x : v3) {} // 范围for推荐 for (auto it v3.begin(); it ! v3.end(); it) {} // 迭代器 return 0; }竞赛场景存储输入数据、临时结果、图的邻接表等。(2) string字符串替代 char 数组内置大量字符串操作避免手动处理内存。#include string using namespace std; int main() { string s1 abcde; string s2 123; // 核心操作 s1 s2; // 拼接abcde123 s1.length(); // 长度等价于size() s1.substr(1, 3); // 子串从索引1开始长度3 → bcd s1.find(cd); // 查找子串位置返回索引找不到返回string::npos s1.erase(2, 1); // 删除从索引2开始长度1 → abde123 reverse(s1.begin(), s1.end()); // 反转字符串 // 字符访问 char c s1[0]; // 下标访问O(1) return 0; }竞赛场景字符串处理题反转、匹配、拼接、子串。2. 关联式容器(1) map/unordered_map键值对map红黑树实现键有序查找 / 插入 O (logn)unordered_map哈希表实现键无序平均查找 / 插入 O (1)竞赛优先用。#include map #include unordered_map using namespace std; int main() { unordered_mapstring, int mp; // 核心操作 mp[apple] 5; // 插入键值对 mp.insert({banana, 3}); // 另一种插入方式 // 查找键是否存在竞赛核心 if (mp.find(apple) ! mp.end()) { // 方式1find int val mp[apple]; // 获取值 } // C20 可用 mp.contains(apple) // 遍历 for (auto p : mp) { // p.first 是键p.second 是值 } mp.erase(banana); // 删除指定键 mp.clear(); // 清空 return 0; }竞赛场景统计元素出现次数、哈希映射如字符串→数字、节点→权值。(2) set/unordered_set集合set有序无重复红黑树实现unordered_set无序无重复哈希表实现竞赛优先。#include unordered_set using namespace std; int main() { unordered_setint st; st.insert(1); // 插入自动去重 st.insert(2); st.insert(1); // 重复插入无效 // 查找元素 if (st.count(2)) { // count返回0/1判断是否存在推荐 // 元素存在 } st.erase(1); // 删除元素 return 0; }竞赛场景去重、快速判断元素是否存在如判断某个数是否在集合中。3. 容器适配器专用场景(1) stack栈后进先出LIFO核心操作push/pop/top。#include stack using namespace std; int main() { stackint stk; stk.push(1); // 入栈 stk.push(2); stk.top(); // 获取栈顶元素2 stk.pop(); // 出栈无返回值 stk.empty(); // 判断是否为空 return 0; }竞赛场景括号匹配、DFS 非递归实现、单调栈求 Next Greater Element。(2) queue队列先进先出FIFO核心操作push/pop/front/back。#include queue using namespace std; int main() { queueint q; q.push(1); // 入队 q.push(2); q.front(); // 队首1 q.back(); // 队尾2 q.pop(); // 出队无返回值 return 0; }(3) priority_queue优先队列 / 堆默认大顶堆可改为小顶堆核心操作push/pop/top。#include queue using namespace std; int main() { // 大顶堆默认堆顶是最大值 priority_queueint max_heap; max_heap.push(3); max_heap.push(1); max_heap.top(); // 3 // 小顶堆堆顶是最小值竞赛高频 priority_queueint, vectorint, greaterint min_heap; min_heap.push(3); min_heap.push(1); min_heap.top(); // 1 max_heap.pop(); // 弹出堆顶 return 0; }竞赛场景堆排序、TopK 问题如找前 k 大 / 小元素、贪心算法。二、核心算法algorithm 头文件竞赛中无需手动实现基础算法直接调用 STL 算法以下是高频用法算法函数功能时间复杂度适用场景sort排序O(nlogn)所有序列式容器vector/stringreverse反转序列O(n)字符串 / 数组反转binary_search二分查找有序序列O(logn)判断元素是否存在lower_bound/upper_bound有序序列找下界 / 上界O(logn)找第一个≥x / 第一个 x 的位置max/min找两个数的最大 / 最小值O(1)快速比较max_element/min_element找序列最大 / 最小值O(n)找数组 /vector 的最值swap交换两个变量的值O(1)数据交换示例lower_bound/upper_bound#include vector #include algorithm using namespace std; int main() { vectorint v {1, 2, 3, 3, 4, 5}; // 必须先排序 // lower_bound第一个≥3的位置 → 索引2 auto it1 lower_bound(v.begin(), v.end(), 3); // upper_bound第一个3的位置 → 索引4 auto it2 upper_bound(v.begin(), v.end(), 3); // 统计3的个数it2 - it1 → 2 return 0; }三、常用工具1. pair二元组存储一对值无需手动定义结构体竞赛中常用作返回值、临时存储。#include utility using namespace std; int main() { pairint, string p1 {1, apple}; pairint, int p2 make_pair(2, 3); // 另一种初始化 // 访问 int a p1.first; // 1 string s p1.second; // apple // 排序默认先比first再比second vectorpairint, int vp {{3, 2}, {1, 5}, {3, 1}}; sort(vp.begin(), vp.end()); // 结果(1,5), (3,1), (3,2) return 0; }竞赛场景存储坐标x,y、带权值的元素值权等。2. bitset位集高效处理二进制位操作节省空间1 位占 1bit而非 1 字节。#include bitset using namespace std; int main() { bitset8 bs; // 8位的位集初始全0 bs.set(2); // 第2位设为100000100 bs.reset(2); // 第2位设为0 bs.flip(); // 所有位取反 bool b bs.test(3); // 判断第3位是否为1 return 0; }竞赛场景状态压缩、位运算优化如状压 DP。

相关新闻

帛书《周易》“登”象不是《易经》“升”卦

帛书《周易》“登”象不是《易经》“升”卦

登象“登”卦,在通行本《周易》中被称为“升”卦。但是,帛书版用“登”字,直接还原了这个卦的原始动作意象。 “升”侧重于“向上的结果”,而“登”侧重于“向上的动作与过程”,特别是“脚踏实地、一步步向上”的意象。…

2026/7/3 15:03:08 阅读更多 →
互联网大厂Java面试实战:严肃面试官与搞笑程序员蔡虚昆的三轮提问(核心语法/Spring/MyBatis/微服务/Kafka详解)

互联网大厂Java面试实战:严肃面试官与搞笑程序员蔡虚昆的三轮提问(核心语法/Spring/MyBatis/微服务/Kafka详解)

互联网大厂Java面试实战:严肃面试官与搞笑程序员蔡虚昆的三轮提问 本文以一场典型的互联网大厂Java职位面试为背景,模拟严肃的面试官与略显搞笑但有一定基础的程序员蔡虚昆之间的三轮技术问答。本文涵盖Java核心技术、Spring生态、数据库ORM、微服务等多…

2026/7/3 17:53:24 阅读更多 →
蜻蜓优化算法DA优化BP:多分类与二分类建模的matlab程序,详细注释,易学易用

蜻蜓优化算法DA优化BP:多分类与二分类建模的matlab程序,详细注释,易学易用

蜻蜓优化算法DA优化BP做多分类建模,同样可以用于二分类建模。 程序内注释详细直接替换数据就可以用。 可学习性强。 程序是matlab语言。 想要的加好友我吧。最近在整分类模型的老铁们注意了!传统BP神经网络的局部最优问题真能让人抓狂,今天咱…

2026/7/4 19:29:39 阅读更多 →

最新新闻

PW7127+PW4406A*4三串锂电池充放电保护板方案,持续6A,过流保护14A,带NTC过温

PW7127+PW4406A*4三串锂电池充放电保护板方案,持续6A,过流保护14A,带NTC过温

概述 本保护板采用平芯微自研PW7126保护芯片,搭配PW4406A 4 MOS管,为3S(三节串联锂电池组11.1V,12.6V满充)锂电池组提供完整的过充、过放、过流及短路保护。持续放电电流6A,过流保护阈值约7A。集成PW2213均…

2026/7/5 3:35:03 阅读更多 →
AD实战指南:从DXF结构图到精准PCB板框的完整流程

AD实战指南:从DXF结构图到精准PCB板框的完整流程

1. DXF文件导入前的准备工作每次拿到结构工程师发来的DXF文件时,我总会先做三件事:检查文件版本、确认软件兼容性、备份原始文件。这就像厨师做菜前要备料一样,准备工作做得好,后续操作才能事半功倍。首先用AutoCAD打开文件时&…

2026/7/5 3:33:03 阅读更多 →
UPX 3.96 手动脱壳实战:ESP定律法 5 步定位 OEP 与 IAT 修复

UPX 3.96 手动脱壳实战:ESP定律法 5 步定位 OEP 与 IAT 修复

UPX 3.96 手动脱壳实战:ESP定律法精解与IAT修复全流程 逆向工程领域流传着一句话:"真正的逆向工程师不是靠工具,而是靠对程序执行流的深刻理解。"这句话在手动脱壳过程中体现得尤为明显。作为最经典的压缩壳之一,UPX以其…

2026/7/5 3:33:03 阅读更多 →
开启我的编程学习之路

开启我的编程学习之路

一、简单自我介绍大家好,我是一名计算机专业大一新生,目前刚开始接触计算机底层基础和C语言编程。在此之前,我几乎没有代码编写经验,属于零基础编程小白。我性格耐心、做事喜欢循序渐进,擅长按计划完成学习任务&#x…

2026/7/5 3:31:02 阅读更多 →
分享最新Navicat安装教程(附免费文件)

分享最新Navicat安装教程(附免费文件)

目录 前言 软.件.下.载 安装教程(新手保姆级) 结束语 前言 大家好,我是 Ktiiy 学姐👋。刚入驻 CSDN,以后会持续更新,给大家免费零基础开发环境搭建、项目源码、避坑教程、面试技巧等!点关注…

2026/7/5 3:31:02 阅读更多 →
iOS27 App Intents 实战

iOS27 App Intents 实战

iOS27 App Intents 实战:新版 Siri 快捷指令接入全流程教程随着WWDC2026的正式落幕,苹果推送的iOS27带来了Siri架构的全面重构,其中最核心的变化就是正式弃用SiriKit,将App Intents确立为第三方应用接入Siri的唯一官方框架。对于开…

2026/7/5 3:29:02 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻