
C++常用STL模板与算法(开箱即用版)
给出算法题常用的STL模板与算法的简单示例,只涉及简单直接的用法,方便直接上手使用
星光银河
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
std::list<int> li 双向链表的使用
特性std::dequestd::list底层结构动态数组块组成的分段数组双向链表随机访问(li[i])✅ O(1),支持❌ 不支持任意位置插入/删除❌ O(n),因为需要移动元素✅ O(1),若已知位置(通过 iterator)✅ O(1)✅ O(1)✅ O(1)✅ O(1)内存开销较低(连续内存块)高(每个节点带两个指针)指针或引用稳定性插入/删除可能使引用失效节点稳定(不会失效)遍历效率更高(更好的缓存局部性)较差(链表遍历不连续)std::list是双向链表。原创 2025-05-26 10:02:39 · 374 阅读 · 0 评论 -
手动实现两种典型简单排序(稳定与不稳定)
防止面试过程中不能直接用sort()或者stable_sort(),下面给出两种简单实现且高效的排序算法的手动实现,直接背下来就完事了!稳定排序:(插入排序)不稳定:(快速排序)原创 2025-05-22 12:45:44 · 168 阅读 · 0 评论 -
算法题记忆引子(面试经典150+Hot热题100里面难理解的题)
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:nums = [[3,4]示例 2:nums = [[-1,-1]示例 3:[-1,-1]nums是一个非递减数组res = mid;}else{原创 2025-05-22 11:52:12 · 1065 阅读 · 0 评论 -
将有序数组转化为二叉搜索树
1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。排列,请你将其转换为一棵 平衡 二叉搜索树。原创 2025-05-21 10:03:05 · 121 阅读 · 0 评论 -
手动实现 KMP 字符串匹配(完全注释版)
【代码】手动实现 KMP 字符串匹配(完全注释版)原创 2025-05-20 10:57:48 · 360 阅读 · 0 评论 -
Boyer-Moore 字符串匹配算法,比 KMP 更快!!!
方法时间复杂度适用场景O(n*m)简单搜索,适用于短字符串KMP 算法O(n+m)需要高效匹配时(手动实现)(C++17)O(n/m)适用于长字符串,性能最好。原创 2025-05-20 10:34:42 · 444 阅读 · 0 评论 -
Floyd 判环算法(快慢指针)
当两个指针在环内相遇时,从链表起点再设一个指针,与相遇点一起走,范围内,说明至少有一个重复数字。在不修改原数组的前提下,,因此可使用 Floyd 判环算法找到环的入口,即。指向的“下一个节点”。给定一个链表,如果链表中存在环,请找出环的。的数组,所有元素值在。原创 2025-05-19 17:54:38 · 592 阅读 · 0 评论 -
链表操作场景与循环条件技巧总结表(含指针初始化)
由于链表原地算法的循环条件的的设置与思考容易消耗时间,而如果设置错误,就需要模拟走一遍,很浪费时间,还不一定对。所以我直接对链表问题结束循环的条件判断进行了全面的总结并列出表格cur->next。原创 2025-05-19 10:51:53 · 316 阅读 · 0 评论 -
针对二分查找部分问题的一个通用模板
【代码】针对二分查找部分问题的一个通用模板。原创 2025-05-16 10:49:55 · 380 阅读 · 0 评论 -
处理有向图的拓扑排序
判断是否存在拓扑排序序列,并获取任意一个正确的拓扑排序序列。原创 2025-05-07 11:31:34 · 507 阅读 · 0 评论 -
将一个带有空格的字符串(如英文句子)进行拆分的即插即用代码
例如将"how are you"进行拆分并加入vector。原创 2025-05-06 10:52:39 · 103 阅读 · 0 评论 -
动态规划问题递推公式大全(也叫状态转移方程,可直接查阅,持续更新)
动态规划问题通过直接思考并编程解决问题是很难的,而且十分费时间,所以我整理了一份动态规划递推公式大全,可用于直接查阅并直接套用进行编程,同时附加上完整代码,文章将分为一维和二维进行总结。原创 2025-05-05 17:12:12 · 1653 阅读 · 0 评论 -
LeetCode 数学算法技巧全解(含C++实现,持续更新)
在刷 LeetCode 的过程中,我们经常会遇到各种数学题,这类题目往往无法仅靠暴力法取胜,背后的数学原理才是通关关键。本文将详细整理 LeetCode 常见数学技巧,包括理论 + 高质量 C++ 实现。原创 2025-04-29 22:37:11 · 1029 阅读 · 0 评论 -
获取当前时间
【代码】获取当前时间。原创 2025-04-29 21:27:31 · 122 阅读 · 0 评论 -
C++处理大数相加(简单版)
通过字符串模拟简单的相加与进位来实现大数相乘。其中Add为上面的大数相加函数。如果,假设读取的是两个超过。原创 2025-04-29 21:14:35 · 254 阅读 · 0 评论 -
[图] 有向图 与 无向图 判断是否存在环
vector<vector<int>>& graph //邻接表。原创 2025-04-23 16:52:06 · 5689 阅读 · 0 评论 -
[图]手动构造邻接表
【代码】[图]手动构造邻接表。原创 2025-04-23 13:47:06 · 5533 阅读 · 0 评论 -
位运算冷知识
例如当 x = 3 时,x 的二进制表示为 11,x & (1 << 1) = 11 & 10 = 10 > 0,说明第 1 位为 1;例如当 x = 5 时,x 的二进制表示为 101,(x >> 1) & 1 = 10 & 1 = 0,说明第 1 位为 0。例如当 x = 6 时,x 的二进制表示为 110,(x >> 3) & 1 = 0 & 1 = 0,说明第 3 位为 0。例如当 x = 3 时,x 的二进制表示为 11,(x >> 1) & 1 = 1 & 1 = 1,说明第 1 位为 1;原创 2025-03-25 21:12:29 · 164 阅读 · 0 评论 -
逆波兰表达式(后缀表达式) 与 前缀表达式的求值
/ 弹出两个操作数。// 从右往左遍历 tokens。原创 2025-04-18 11:55:33 · 6219 阅读 · 0 评论 -
常用矩阵操作(持续更新)
/顺时针旋转90度。原创 2025-04-17 14:02:55 · 5734 阅读 · 0 评论 -
ASCII码表
原创 2025-03-25 21:20:19 · 5597 阅读 · 0 评论 -
最大公约数与最小公倍数
_gcd(x,y);//前面是两个下划线。最小公倍数=x*y/__gcd(x,y);//当两个数互质时gcd为1。//也可以用来化简分数。原创 2025-03-25 21:19:13 · 101 阅读 · 0 评论 -
字符串的常用操作汇总与特殊输入处理
/用 "123456" 的子串从2开始共4位长度的子串,也就是"3456" 替换 s1 的从1开始共3位长度的子串,也就是"eal"// s1 = "123abcbcKKKCDE",添加 "ABCDE" 的子串(2, 3)n = s1.compare(1, 2, "Hello", 1, 2);//比较 s1 的子串(1,2)和 "Hello" 的子串(1,2)//比较s1的子串 (1,2) 和s2的子串 (0,3)s1.erase(5);原创 2025-03-25 21:18:05 · 723 阅读 · 0 评论 -
取整(最简单最直接的使用)
如: floor(10.5) == 10 floor(-10.5) == -11。如: ceil(10.5) == 11 ceil(-10.5) ==-10。使用floor函数。floor(x)返回的是小于或等于x的最大整数。ceil(x)返回的是大于等于x的最小整数。原创 2025-03-25 21:10:17 · 98 阅读 · 0 评论 -
判断素数(最简单最直接的方法)
只判断到sqrt(x)就可以了(只能处理10000以内)原创 2025-03-25 21:07:32 · 105 阅读 · 0 评论 -
排序与稳定排序
stab_sort //用法与sort一样。原创 2025-03-25 21:05:22 · 87 阅读 · 0 评论 -
C++的排列与组合
【代码】C++的排列与组合。原创 2025-03-25 21:00:23 · 154 阅读 · 0 评论 -
链表的创建示例
【代码】链表的创建示例。原创 2025-03-24 21:25:28 · 120 阅读 · 0 评论 -
万能进制转换
10-xx-10原创 2025-03-24 21:23:45 · 78 阅读 · 0 评论 -
C++的队列,双端队列,优先队列(堆)
返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。5 //输出值为China,因为它是最后进去的。其他用法与队列相同,但是在访问队首元素时,用的是qwe.top();返回队列中最后一个元素,也就是最晚进去的元素。3 //队列为空时,返回值为 1,否则返回 0。6 //输出:0 2,即队列中元素的个数。原创 2025-03-24 21:19:04 · 302 阅读 · 0 评论 -
单源最短路径
【代码】单源最短路径。原创 2025-03-24 21:12:31 · 88 阅读 · 0 评论 -
简单的二分查找
upper_bound(potions.begin(), potions.end(), 5) 返回 potions.begin(),即索引 0。pos = 2,因为 potions[2] == 3。原创 2025-03-24 21:09:38 · 327 阅读 · 0 评论 -
并查集的简单创建与使用
【代码】并查集的简单创建与使用。原创 2025-03-24 21:04:53 · 105 阅读 · 0 评论 -
保留小数位
include <iomanip> // 添加这个头文件以使用 setprecision。//只要通过cout输出浮点数,全部保留三位小数。原创 2025-03-24 21:03:10 · 124 阅读 · 0 评论 -
保留数组排序后的原索引
/ 按 nums2 中对应元素降序排列索引,idxes中保留着排序后的原索引。原创 2025-03-24 20:59:57 · 87 阅读 · 0 评论 -
vector容器(数组的替代者,可用作栈或队列)
可以用ve.erase(unique(ve.begin(),ve.end()), ve.end());插入元素:obj.insert(vec.begin()+i,a);原创 2025-03-24 20:57:59 · 379 阅读 · 0 评论 -
struct内运算符重载
/按照y的大小,,从小到大排序,比如使用优先级队列priority_queue<node>时。原创 2025-03-24 20:53:17 · 102 阅读 · 0 评论 -
set集合
qwe.end().itr++) //遍历set。set<string>::iterator itr //设置迭代器。set //可以自动去重。其他用法和map差不多。原创 2025-03-24 20:49:23 · 121 阅读 · 0 评论 -
map字典的使用
/insert插入。//如果刪除了會返回1,否則返回0。// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置。//定义一个map字典。if(dict.count("Tom")) //查找Tom。//用迭代器范围刪除 : 把整个map清空。{//则标号为num的一项存在}//clear()全删。原创 2025-03-24 20:46:32 · 162 阅读 · 0 评论 -
c++字符串与数字互转
/ 将 num 转换为十六进制 hex:16 dec:10 oct:8 bitset:2。std::stold:将字符串转换为 long double。std::stoll:将字符串转换为 long long。std::stod:将字符串转换为 double。std::stof:将字符串转换为 float。std::stol:将字符串转换为 long。std::stoi:将字符串转换为 int。原创 2025-03-24 20:20:28 · 250 阅读 · 0 评论