C++算法竞赛常用STL
一.常用容器1.向量vector#includevector构造vector类型 arr(长度[初值])使用示例vectorint arr;//构造int数组 vectorint arr(100);//构造初始长为100的数组 vectorint arr(1001);//构造初始值为1初始长为100的数组 vectorvectorint arr(100,vectorint ());//构造行数100行不指定列数的二维数组 vectorvectorint arr(100,vectorint (1001));//构造行数100列数100初始值为1的二维数组尾接尾删.push_back():在vector尾接一个元素长度1.pop_back():删除vector尾部的元素长度-1获取长度.size():获取当前vector的长度清空.clear():清空vector判空.empty():判断是否为空空则返回1非空则返回0改变长度.resize(新长度[默认值])修改vector的长度一般情况下vector可替换掉普通数组除非卡常2.栈stack#includestack作用用法构造stack类型 stk进栈.push(元素)出栈.pop()取栈顶.top()注意栈不可访问内部元素,栈是先进后出3.队列queue#includequeue作用用法构造queue类型 queue进队.push(元素)出队.pop()取队首.front()取队尾.back()同样队列也不可以访问内部元素队列是先进先出4.优先队列priority_queue:#includequeue构造priority_queue类型容器比较器 pque类型要存储的数据类型容器储存数据的底层容器默认vector类型竞赛中保持默认即可比较器比较大小使用的比较器默认为小根堆priority_queueint pque;//小根堆 priority_queueint,vectorint,greaterint pque1;//大根堆小根堆值越小优先级越高函数对其进行的操作都优先返回小的元素大跟堆值越大优先级越高函数对其进行的操作都优先返回大的元素作用用法进堆.push(元素)出堆.pop()取堆顶.top()5.集合set#includeset集合的特性就是数学中的互异性、确定性同时集合是有序的存进集合中的元素会自动排序构造set类型比较器 名称比较器默认less类型setint st1; setint,greater st2;遍历set遍历有两种第一种是用迭代器进行遍历for(setint::iterator it st.begin();it ! st.end();it){ cout*itendl; }第二种是基于范围的循环for(auto ele : st){ couteleendl; }操作set的函数作用用法插入元素.insert()删除元素.erase()查找元素.find()判断元素是否存在.count()set在需要元素去重和维护顺序时需要优先使用注意set不存在下标索引set中的元素只读不可用迭代器计算下标6.映射map构造map键类型值类型比较器 mp比较器默认less类型mapint,int mp1; mapint,int,greaterint mp2;遍历map一共三种遍历方式第一种用迭代器进行遍历for(mapint,int::iterator it mp.begin();it !it.end();it){ coutit-first it-secondendl; }第二种也是基于范围循环for(auto pr : mp){ coutpr.first pr.secondendl; }第三种是结构化绑定范围内的循环for(auto [key,val]){ coutkey valendl; }操作函数作用用法查找元素.find()删除元素.erase()增/改/查元素[]判断元素是否存在.count()在需要统计字符串出现次数时推荐使用7.字符串string#includestring构造string(长度初值)stl里的字符串不像C语言里面的那么麻烦可以直接输入输出还有很多很方便的函数可以进行操作操作函数作用用法修改、查询指定下标字符[]判断是否相同字符串连接尾接字符串取子串.substr(起始下标子串长度)查找字符串.find(字符串起始下标)数值与字符串互转(C11):源目的函数int/long long/float/double/long doublestringto_string()stringintstoi()stringlogn longstoll()stringfloatstof()stringdoublestod()stringlong doublestold()尾接字符串一定要用.find()的实现是暴力实现时间复杂度是8.二元组pair#includeutility构造pair第一个值类型第二个值类型 prpairint,char pr {1,a};判同直接用运算符二.迭代器1.为何需要迭代器很多数据结构并不是线性的例如红黑树对于非线性数据结构下标是无意义的。无法使用下标来遍历整个数据结构。迭代器的作用就是定义某个数据结构的遍历方式通过迭代器的增减代表遍历到的位置通过迭代器便能成功遍历非线性结构了。例如set 的实现是红黑树我们是没法用下标来访问元素的。但是通过迭代器我们就能遍历 set 中的元素了for(setint::iterator it st.begin();it ! st.end();it){ cout*itendl; } ​2.迭代器用法对于 vector 容器它的迭代器功能比较完整以它举例.begin()头迭代器.end()尾迭代器.rbegin()反向头迭代器.rend()反向尾迭代器迭代器整型将迭代器向后移动迭代器-整型将迭代器向前移动迭代器将迭代器向后移动 1 位迭代器--将迭代器向前移动 1 位迭代器-迭代器两个迭代器的距离prev(it)返回 it 的前一个迭代器next(it)返回 it 的后一个迭代器对于其他容器由于其结构特性上面的功能不一定都有注意.end()和.rend()指向的值是无意义的除了遍历和访问非必要不要使用迭代器三.常用算法1.swap()作用交换两个变量的值用法示例int a 4,b 5; swap(a,b);2.sort()作用使用快速排序给一个可迭代对象排序默认排序从小到大vectorint arr{1,9,1,9,8,1,0}; sort(arr.begin(),arr.end()); //arr [0,1,1,1,8,9,9]如果需要从大到小则需要传比较器进去vectorint arr{1, 9, 1, 9, 8, 1, 0}; sort(arr.begin(), arr.end(), greaterint()); // arr [9, 9, 8, 1, 1, 1, 0]如果需要完成特殊比较则需要手写比较器bool cmp(pairint, int a, pairint, int b) { if (a.second ! b.second) return a.second b.second; return a.first b.first; } int main() { vectorpairint, int arr{{1, 9}, {2, 9}, {8, 1}, {0, 0}}; sort(arr.begin(), arr.end(), cmp); // arr [(0, 0), (8, 1), (2, 9), (1, 9)] }3.lower_bound()/upper_bound():在升序的元素中应用二分查找检索指定元素返回对应元素迭代器位置找不到则返回尾迭代器lower_bound():寻找第一个该元素的位置upper_bound():寻找第一个.该元素的位置返回的是迭代器如何转成下标索引呢减去头迭代器即可vectorint arr{0, 1, 1, 1, 8, 9, 9}; vectorint::iterator it lower_bound(arr.begin(), arr.end(), 7); int idx it - arr.begin(); // idx 44.reverse():作用反转一个可迭代对象的元素顺序用法示例vectorint arr(10); iota(arr.begin(), arr.end(), 1); // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 reverse(arr.begin(), arr.end()); // 10, 9, 8, 7, 6, 5, 4, 3, 2, 15.max/min():返回最大值/最小值的数值在 C11 之后可以使用列表构造语法传入一个列表这样就能一次性给多个元素找最大值而不用套娃了// Before C11 int mx max(max(1, 2), max(3, 4)); // 4 int mn min(min(1, 2), min(3, 4)); // 1 // After C11 int mx max({1, 2, 3, 4}); // 4 int mn min({1, 2, 3, 4}); // 16.unique():作用消除数组的重复相邻元素数组长度不变但是有效数据缩短返回的是有效数据位置的结尾迭代器7.gcd/lcm()作用(C17返回最大公因数 / 最小公倍数8.数学函数作用示例||abs(-1.0)exp(2)lnxlog(3)pow(2,3)sqrt(2)ceil(2.1)floor(2.1)round(2.1)四.结语这篇文章是为了备考算法竞赛而准备的里面基本上都比较常用也希望能够帮到有需要的人

相关新闻

OFDM符号周期的物理意义与工程设计原理

OFDM符号周期的物理意义与工程设计原理

1. 为什么OFDM符号周期不是“随便定个数就行”的参数OFDM(正交频分复用)这个词,现在几乎已经渗透到我们每天接触的无线设备里——从家里Wi-Fi路由器的配置页面,到无人机遥控器背后的技术文档,再到工业巡检热成像仪的通…

2026/9/27 2:16:14 阅读更多 →
前端本地存储数据防篡改:使用 CryptoJS SHA256 签名校验方案

前端本地存储数据防篡改:使用 CryptoJS SHA256 签名校验方案

前言在前端开发中,我们经常使用localStorage来临时存储页面间传递的数据,比如列表页跳转详情页时,把当前行数据存入本地存储。 但是localStorage的数据是明文存储,用户打开浏览器开发者工具,就可以随意修改里面的 JSON…

2026/9/25 18:59:37 阅读更多 →
智能制造——2026 智慧工厂AI赋能MES应用方案

智能制造——2026 智慧工厂AI赋能MES应用方案

本 57 页 PPT 适配智能工厂、工业数字化咨询方案编制。结合智能制造相关政策与行业市场数据,基于 ISA‑95 国标体系,解析 MES 定位、11 大核心功能域、跨系统集成逻辑。 覆盖离散、流程、混合制造差异化落地策略,对比云端、本地、混合部署模式,梳理厂商选型维度、实施痛点误…

2026/9/25 18:59:37 阅读更多 →

最新新闻

南通做百度网站的公司哪家好?3个坑点教你避开性能优化雷区

南通做百度网站的公司哪家好?3个坑点教你避开性能优化雷区

南通做百度网站的公司哪家好?3个坑点教你避开性能优化雷区 域名服务器搞不懂,是很多南通老板找建站公司时的第一道坎。你以为买个.com域名、租台云服务器就能开工,结果上线后打开速度慢如蜗牛,百度收录更是石沉大海。这背后不仅是配置问题,更是…

2026/9/27 2:15:42 阅读更多 →
Flash网站设计实例一文搞懂:不懂代码也能避坑的报价单

Flash网站设计实例一文搞懂:不懂代码也能避坑的报价单

Flash网站设计实例一文搞懂:不懂代码也能避坑的报价单 自己不会代码想做网站,这大概是每个创业者最头疼的难题。看着同行网站花里胡哨,自己却连HTML标签都写不对,这时候找外包公司,最怕的就是被坑。今天这篇文章,我就用10年实战经验,把Fl…

2026/9/27 2:15:42 阅读更多 →
告别塞满广告的右键菜单:ContextMenu Manager Plus 完全解析——夺回 Windows 右键菜单控制权

告别塞满广告的右键菜单:ContextMenu Manager Plus 完全解析——夺回 Windows 右键菜单控制权

告别塞满广告的右键菜单:ContextMenu Manager Plus 完全解析——夺回 Windows 右键菜单控制权 【免费下载链接】ContextMenuMgr Context Menu Manager Plus 是一个强大的实用程序,它可帮助您管理 Windows 上的右键菜单,并避免第三方向你的右键…

2026/9/27 2:15:42 阅读更多 →
网站建设要不要监理?3步图解步骤拆解避坑指南

网站建设要不要监理?3步图解步骤拆解避坑指南

网站建设要不要监理?3步图解步骤拆解避坑指南 很多老板刚决定建站,第一反应是找家便宜的代做公司。结果呢?备案流程一头雾水,合同里没写清验收标准,网站上线后才发现页面在手机上全是乱的,或者SEO结构根本不符合搜索引擎抓取逻辑。这时候你想找个人…

2026/9/27 2:15:42 阅读更多 →
3个技巧搞定wordpress笑话站主题,新手选哪家好

3个技巧搞定wordpress笑话站主题,新手选哪家好

3个技巧搞定wordpress笑话站主题,新手选哪家好 不会写代码想做个站?别慌,这行老手教你选对wordpress笑话站主题。很多人卡在“哪家好”这一步,其实核心是看模板是否适配你的内容结构。下面直接上干货,按项目流程拆给你看。…

2026/9/27 2:14:42 阅读更多 →
VSCode+ESP8266 RTOS_SDK环境搭建:编译烧录全攻略

VSCode+ESP8266 RTOS_SDK环境搭建:编译烧录全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 2:14:42 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →