- 博客(345)
- 收藏
- 关注
原创 std::shared_mutex、std::mutex和std::recursive_mutex是什么锁
维度std::mutexC++版本C++11C++11C++17独占性✅ 独占✅ 独占✅ 写独占,❌ 读共享递归❌ 不支持✅ 支持❌ 不支持读并发❌ 不支持❌ 不支持✅ 支持性能最高略低读场景高,写场景低RAII工具lock_guardlock_guard(读) /(写)适用场景通用递归/嵌套调用读多写少。
2026-05-18 16:25:59
225
原创 compare_exchange_weak 的用法
场景推荐函数说明循环内重试(自旋锁、无锁队列)性能更高,循环处理虚假失败单次尝试(无循环)保证无虚假失败,更可靠低竞争环境weak+ 循环最高性能需要代码简洁性strong避免手动重试最佳实践:在循环中优先使用weak,非循环场景使用strong。
2026-05-18 16:11:51
105
原创 C++多线程编程
多线程允许程序同时执行多个任务,充分利用多核处理器资源,提高程序性能,尤其在处理 I/O 密集型或并行计算任务时效果显著。C++11 标准引入了<thread>头文件,提供了对原生线程操作的支持。
2026-05-17 22:49:28
412
原创 std::tuple元组的基本使用
适用场景:函数需要返回多个不同类型的值、临时组合数据进行传递、或者在算法竞赛中快速打包数据。不适用场景:如果数据有明确的业务含义且需要长期维护,建议使用struct(结构体),因为的可读性远好于。
2026-05-10 19:02:27
81
原创 c++知识点4
如果它在处理任务 A 时被打断,转而去处理任务 B(恰好也是调用这个函数),它可能会忘记任务 A 做到哪一步了,或者把任务 A 的数据给覆盖了。头文件中,使得开发者无需为基本操作重复编写仿函数,可以直接将其作为参数传递给 STL 算法,从而让代码更加简洁、清晰和通用。只负责纯粹的内存分配与释放,完全不关心内存里存放的是什么,因此不会调用任何构造或析构函数。当你有一个函数,但只想固定它的某些参数,生成一个新函数时,就非常有用。常被用来将类的成员函数转换为普通的可调用对象,尤其适合用作回调函数。
2026-05-05 23:21:23
535
原创 C++面向对象和类相关
面向对象:对象是指具体的某一个事物,这些事物的抽象就是类,类中包含数据(成员变量)和动作(成员方法)。面向对象的三大特性:C++中的多态通常分为两种主要类型:虚函数是通过在基类中声明一个函数为 来实现的。这标志着这个函数可以被派生类重写(override)。当通过基类指针或引用调用虚函数时,C++会查找实际对象的类型,调用对应的子类实现,而不是基类的实现。多态的实现依赖于一个称为“动态绑定”或“运行时绑定”的机制。当基类中的函数被声明为 时,编译器就会为这个类开启多态支持。C++的多态底层原理:
2026-04-24 23:42:35
474
原创 c++面试常问2
在C++中,使用关键字"inline"可以声明一个内联函数。声明为内联函数的函数会在编译时被视为候选项,编译器会尝试将其展开,将函数体直接插入到调用点处。这样可以避免函数调用的开销,减少了函数调用的栈帧等额外开销,从而提高程序的执行效率。内联函数是在编译时展开,而宏在编译预处理时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。内联函数是真正的函数,和普通函数调用的方法一样,在调用点处直接展开,避免了函数的参数压栈操作,减少了调用的开销。
2026-04-24 23:07:20
399
原创 c++面试常问1
如果在头文件中定义全局变量,当该头文件被多个文件 include 时,该头文件中的全局变量就会被定义多次,导致重复定义,因此不能再头文件中定义全局变量。const修饰成员变量,定义成const常量,相较于宏常量,可进行类型检查,节省内存空间,提高了效率。const修饰函数参数,使得传递过来的函数参数的值不能改变。const修饰成员函数,使得成员函数不能修改任何类型的成员变量(mutable修饰的变量除外),也不能调用非const成员函数,因为非const成员函数可能会修改成员变量。
2026-04-24 00:29:59
385
原创 C++内存资源及管理
内存被分成五个区:栈、堆、静态存储区、常量区、代码区。C++ 的内存管理是其最强大但也最复杂的特性之一。它赋予了程序员对硬件的极致控制权,但也要求程序员承担起精确管理的责任。现代 C++ 的内存管理哲学已经从转向了,核心思想是。
2026-04-22 11:11:07
281
原创 struct,union,Class,bitfield各自的作用和区别
特性structunionclassbitfield核心用途数据打包,描述事物属性节省内存,多类型复用封装数据与行为 (OOP)极致压缩,硬件映射内存占用各成员独立,总和+对齐成员共用,取最大值同 struct按位分配,多个成员挤在一起数据共存✅ 所有成员同时有效❌ 同一时间仅一个有效✅ 所有成员同时有效✅ 同时有效默认访问权限(C++)publicpublicprivate(取决于所在结构)典型场景数据传输对象、配置项变体数据类型、协议解析。
2026-04-22 11:02:32
414
原创 volatile关键字
如果你在做嵌入式开发,操作硬件寄存器,必须用volatile。如果你在做多线程开发,共享变量,请用或std::mutex,不要依赖volatile。口诀volatile是防编译器“偷懒”的,不是防多线程“打架”的。
2026-04-22 10:52:46
379
原创 Lambda, 闭包是什么?
// 还要费劲想个函数名// 用完即走,无需命名它的本质虽然写起来像函数,但编译器在后台其实把它编译成了一个匿名类对象(闭包)。这个对象重载了()运算符,所以你可以像调用函数一样调用它。以前你需要专门写一个compare函数或仿函数,现在可以直接写在sort里面。// 需求:降序排序});// 需求:查找第一个大于 threshold 的数(捕获外部变量)// 这里使用了外部的 threshold});return 0;
2026-04-22 10:36:59
1053
原创 947. 移除最多的同行或同列石头
石头 [0,0] 和 [1,1] 不能移除,因为它们没有与另一块石头同行/列。2. 移除石头 [2,1] ,因为它和 [0,1] 同列。3. 移除石头 [1,2] ,因为它和 [1,0] 同行。4. 移除石头 [1,0] ,因为它和 [0,0] 同列。5. 移除石头 [0,1] ,因为它和 [0,0] 同行。1. 移除石头 [2,2] ,因为它和 [2,0] 同行。2. 移除石头 [2,0] ,因为它和 [0,0] 同列。3. 移除石头 [0,2] ,因为它和 [0,0] 同行。
2026-03-08 20:46:16
235
原创 c++刷题细节
98. 验证二叉搜索树C++-优快云博客C++ 使用标准库<limits>来获取各种数据类型的最小值和最大值。获取long long的最小值(对应 Java 的// 整数类型// 无符号整数// 浮点类型std::cout << " min = " << std::numeric_limits<float>::min() << " (注意:这是正的最小正规数)\n";
2026-03-05 10:32:34
238
原创 523. 连续的子数组和
给你一个整数数组nums和一个整数k,如果nums有一个返回true,否则返回false一个knxx = n * kxk0knums = [23,2,4true[2,4] 是一个大小为 2 的子数组,并且和为 6。nums = [23,2,6,4,7], k = 6true[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42。42 是 6 的倍数,因为 42 = 7 * 6 且 7 是一个整数。false。
2026-03-04 22:53:46
84
原创 63. 不同路径 II
给定一个m x n的整数数组grid。一个机器人初始位于(即grid[0][0]机器人尝试移动到(即机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用1和0来表示。机器人的移动路径中不能包含有障碍物的方格。返回机器人能够到达右下角的不同路径数量。
2026-03-04 22:51:50
63
原创 priority_queue 优先队列(Priority Queue)
pair// 最小堆:按 pair 的 first 升序(字典序)// 输出 "2,5"方式 A:重载operator<(用于最大堆)int age;// 注意:priority_queue 默认用 less,而 less 调用 operator<// 所以若想“年龄大的优先”,就让 a < b 表示 a 优先级低// 这样 top() 是年龄最大的// 最大堆(按年龄)方式 B:自定义比较函数(推荐,更灵活)// 注意:返回 true 表示 a 优先级 < b → 最小堆。
2026-03-04 10:06:28
645
原创 1094. 拼车---优先队列
💡 举例:如果 trips 按上车点升序,但下车点降序(如。当且仅当你可以在所有给定的行程中接送所有乘客时,返回。这些位置是从汽车的初始位置向东的公里数。乘客,接他们和放他们的位置分别是。),那么每次都要把整个栈倒腾一遍!向一个方向行驶(也就是说,
2026-03-04 09:54:47
491
原创 函数重载const,可以作为判断
const 修饰符可以作为函数重载的依据之一,但仅限于成员函数(member functions)。C++ 允许通过 成员函数是否为 成员函数 来重载。原理: 成员函数的 修饰符实际上是修饰隐含的 指针: 普通成员函数: 成员函数: 因此,函数签名不同,构成合法重载。重载规则: 调用对象类型 优先调用哪个版本? 非 对象 非 成员函数(更匹配) 对象 只能调用 成员函数
2026-03-03 09:47:23
623
原创 113. 路径总和 II
给你二叉树的根节点root和一个整数目标和targetSum,找出所有路径总和等于给定目标和的路径。是指没有子节点的节点。
2026-03-02 23:54:41
61
原创 1247. 交换字符使得字符串相同
注意,你不能交换 s1[0] 和 s1[1] 使得 s1 变成 "yx",因为我们只能交换属于两个不同字符串的字符。交换 s1[0] 和 s2[0],得到 s1 = "yy",s2 = "xx"。交换 s1[0] 和 s2[1],得到 s1 = "xy",s2 = "xy"。交换 s1[0] 和 s2[1],得到 s1 = "yx",s2 = "yx"。每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。相同的最小交换次数,如果没有方法能够使得这两个字符串相同,则返回。
2026-03-02 23:52:35
61
原创 337. 打家劫舍 III
之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为。,小偷能够盗取的最高金额。
2026-03-02 23:50:15
204
原创 213. 打家劫舍 II
你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都。,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。给定一个代表每个房屋存放金额的非负整数数组,计算你。,今晚能够偷窃到的最高金额。
2026-03-01 11:50:11
94
原创 621. 任务调度器
对任务 B 来说也是一样。在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。一种可能的序列为:A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B。表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间。一种可能的序列是:A -> B -> C -> D -> A -> B。由于冷却间隔为 1,你可以在完成另一个任务后重复执行这个任务。
2026-02-26 00:13:06
281
原创 376. 摆动序列
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为。这个序列包含几个长度为 7 摆动序列。
2026-02-25 16:25:52
332
原创 648. 单词替换
— 一旦在 Trie 中遇到一个标记为词根的节点,立即返回,无需排序!添加其他一些词组成另一个较长的单词——我们称这个词为。和一个用空格分隔单词形成的句子。(root) 的概念,可以词根。,最坏情况下仍要遍历整个词典。—— 即使你按长度排序并。Trie 可以将匹配过程从。在英语中,我们有一个叫做。你需要输出替换之后的句子。你需要将句子中的所有。现在,给定一个由许多。
2026-02-25 15:41:47
1088
原创 503. 下一个更大元素 II
是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。第二个 1 的下一个最大的数需要循环搜索,结果也是 2。第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;
2026-02-25 08:59:13
74
原创 209. 长度最小的子数组
如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。
2026-02-24 23:51:34
62
原创 409. 最长回文串
给定一个包含大写字母和小写字母的字符串s,返回通过这些字母构造成的的长度。在构造过程中,请注意。比如"Aa"不能当做一个回文字符串。7我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。s = "a"1可以构造的最长回文串是"a",它的长度是 1。
2026-02-20 09:31:44
96
原创 455. 分发饼干/c++
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果,我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。1你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。所以你应该输出 1。2。
2026-02-20 08:53:23
56
原创 977. 有序数组的平方/c++
给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]
2026-02-20 08:38:22
41
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅