c++
文章平均质量分 51
村北头的码农
c++程序员,目前从事人工智能领域相关工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++学习------lambda表达式
优势说明简洁性无需单独定义函数局部性逻辑紧贴使用处闭包能力捕获环境变量,实现状态保持泛型支持C++14+ 支持auto参数STL 友好完美适配算法、容器、线程等✅现代 C++ 编程中,lambda 是不可或缺的工具!原创 2025-11-30 10:41:04 · 779 阅读 · 0 评论 -
C++学习------空指针常量nullptr
✅在 C++11 及以后,永远使用nullptr表示空指针!消除了0NULL的类型安全隐患提高了代码可读性和健壮性是现代 C++ 的标准实践指针为空用nullptr,告别NULL和0!原创 2025-11-30 10:27:50 · 622 阅读 · 0 评论 -
C++学习------结构体总大小是怎么计算的?
对齐看最大,成员按序排,中间填 padding,末尾补到倍。从偏移 0 开始;对每个成员:找到 ≥ 当前偏移 且 满足该成员对齐要求的地址;插入 padding 到该地址;放置成员;所有成员放完后,总大小 = 最后一个成员结束位置;将总大小向上对齐到最大成员对齐值的整数倍。原创 2025-11-29 12:22:45 · 778 阅读 · 0 评论 -
C++学习------const可以定义函数而define不可以
模拟函数式宏(function-like macro)这里要分清楚const特性#define宏constconstexpr函数是真正的函数?❌ 否(文本替换)✅ 是类型安全?❌ 否✅ 是支持重载?❌ 否✅ 是(函数重载)有作用域?❌ 全局✅ 有(命名空间、类)可调试?❌ 困难✅ 可设断点能用于编译期计算?⚠️ 有限(靠展开)✅constexpr支持能修饰成员函数?❌✅const成员函数。原创 2025-11-29 10:42:07 · 316 阅读 · 0 评论 -
C++学习------指针与引用相比有哪些潜在风险?
风险类型指针引用空值风险✅ 高(需手动检查)❌ 无(必须有效)悬空风险✅ 高(易误用)⚠️ 低(难无意制造)语义模糊✅ 是(所有权/可选性不明)❌ 否(意图清晰)越界/算术错误✅ 可能❌ 不可能安全性较低较高✅结论引用比指针更安全、语义更清晰,应作为函数参数传递类对象的默认选择。只有在明确需要表达“可为空”、“重绑定”或与底层系统交互时,才使用指针,并需格外小心空指针和生命周期问题。如果你正在设计 API,优先问自己:“这个参数是否可能为空?如果不可能为空→ 用。原创 2025-11-29 09:36:18 · 435 阅读 · 0 评论 -
C++学习------为什么推荐使用引用(尤其是 const 引用)?
在大多数情况下,将类对象作为参数传递时使用const T&大型对象只读访问性能敏感代码但也要根据语义和实际需求灵活选择传递方式,不要机械套用。原创 2025-11-29 09:33:22 · 668 阅读 · 0 评论 -
C++学习------字符串字面量(string literal)
特性类型char[6](数组)char*(指针)内存位置栈(可写).rodata(只读)内容来源复制字符串字面量直接指向字面量能否修改内容✅ 能❌ 不能(运行时错误)编译器检查修改合法修改不报错(但应警告)推荐写法无问题应写为。原创 2025-11-27 16:40:58 · 373 阅读 · 0 评论 -
C++学习------异常和中断的区别
特性中断(Interrupt)异常(Exception)来源外部硬件或软件请求CPU 内部执行指令时发生的问题或特殊事件同步性异步(与当前指令执行无关)同步(由当前指令直接引发)可预测性不可预测(随时可能发生)可预测(发生在特定指令执行时)典型例子键盘输入、网卡收到数据、定时器到期除零错误、缺页、系统调用、非法指令✅一句话记住中断来自“外面”,异常来自“里面”。维度中断(Interrupt)异常(Exception)发起者外部设备 or 软件指令(如intCPU 执行指令时内部检测。原创 2025-11-27 15:43:39 · 886 阅读 · 0 评论 -
C++学习------实参和形参区别
概念全称定义位置说明形参形式参数函数定义时声明的变量是函数内部的“占位符”,用于接收传入的数据实参(Argument)实际参数函数调用时传递的具体值或变量是调用者提供的真实数据形参(Parameter)实参(Argument)何时出现函数定义时函数调用时作用接收并使用传入的数据提供要传递的真实数据关系被实参初始化初始化形参💡一句话记住“定义看形参,调用看实参;实参给值,形参接住。原创 2025-11-17 15:56:47 · 441 阅读 · 0 评论 -
C++学习-----函数指针和指针函数
项目指针函数函数指针本质函数指针变量返回值/类型返回一个指针(如int*指向一个函数(如声明示例关键词重心“函数” —— 强调这是一个函数“指针” —— 强调这是一个指针是否可赋值函数名不可赋值(地址固定)指针变量可以重新指向其他函数“指针函数”是返回指针的函数;“函数指针”是指向函数的指针。“指针函数” → 函数;“函数指针” → 指针。掌握这个区别,就能避免常见的声明和使用错误!原创 2025-11-17 15:18:18 · 434 阅读 · 0 评论 -
C++学习------静态变量可以在不同实例中共享
✅静态变量(尤其是类的静态成员变量)确实在不同实例之间共享,这是实现计数器、单例模式、全局配置等设计模式的基础。原创 2025-11-17 09:00:42 · 305 阅读 · 0 评论 -
c++中的static,const,局部,全局变量
局部 static:用于保存状态(如计数器)、避免重复初始化。全局 static:封装实现细节,防止命名冲突。const:提高安全性,允许编译器优化,表达设计意图(不可变)。全局变量:谨慎使用,易导致耦合和难以调试的问题。原创 2025-11-17 08:47:29 · 594 阅读 · 0 评论 -
c++多线程(7)------异步结果获取机制
std::future 是一个只读的“占位符”,代表一个尚未就绪但未来会产生的值(或异常)。它通常与一个提供结果的“生产者”(如 std::promise、std::async)配对使用。一个 future 只能被移动(move),不能被复制(因为结果只能被获取一次)。调用 .get() 会阻塞当前线程,直到结果就绪,然后返回值(或抛出异常)。💡 类比:你去餐厅点餐(发起异步任务),服务员给你一个取餐号(future)。你拿着这个号,等厨房做好后,凭号取餐(调用 get())。场景推荐方案。原创 2025-10-10 15:08:52 · 741 阅读 · 0 评论 -
c++多线程(6)------ 条件变量
条件变量(Condition Variable) 是实现线程间高效等待与通知机制的核心工具,通常与互斥锁配合使用,用于解决“生产者-消费者”、“任务队列”、“线程协调”等经典并发问题。原创 2025-10-09 13:28:09 · 755 阅读 · 0 评论 -
c++多线程(5)------原子操作
C++11 引入了 <atomic> 头文件和 std::atomic<T> 模板类,为多线程编程提供了无锁(lock-free)的原子操作支持。原子操作是并发编程中的基础构建块,用于在不使用互斥锁(mutex)的情况下实现线程安全的数据访问。原创 2025-09-29 13:50:06 · 1193 阅读 · 0 评论 -
c++多线程(4)------互斥同步
概念说明互斥量 (Mutex)用于保护共享资源,确保同一时刻只有一个线程访问RAII 锁 (lock_guard, unique_lock)自动管理锁生命周期,异常安全死锁预防使用 std::lock 同时锁定多个互斥量递归锁recursive_mutex,谨慎使用超时锁timed_mutex,避免无限等待最佳实践锁粒度小、临界区短、优先用 lock_guard。原创 2025-09-16 11:21:34 · 1039 阅读 · 0 评论 -
c++多线程(3)------休眠函数sleep_for和sleep_until
这两个函数都定义在 <thread> 头文件中,属于 std::this_thread 命名空间,用于让当前线程暂停执行一段时间。原创 2025-09-15 18:14:19 · 941 阅读 · 0 评论 -
c++多线程(2)------提示调度器让出当前CPU时间片函数yield()
项目内容函数名头文件thread作用提示调度器让出当前线程的时间片是否阻塞否是否保证切换否(仅提示)适用场景自旋锁、忙等待优化、提高调度公平性不应使用场景替代锁、解决竞态、精确延时替代方案condition_variable, sleep_for, atomic 等✅ 一句话总结:std::this_thread::yield() 是一个轻量级的调度提示,用于在忙等待或高负载循环中主动让出 CPU,以提升系统整体响应性和公平性,但不能依赖其行为进行同步控制。原创 2025-09-15 11:02:13 · 1161 阅读 · 0 评论 -
c++多线程(1)------创建和管理线程td::thread
std::thread 是 C++11 标准库中用于创建和管理线程的核心类,定义在 <thread> 头文件中。它使得多线程编程变得简单、类型安全且跨平台。原创 2025-09-03 17:58:48 · 549 阅读 · 0 评论 -
C++中如何使用互斥(2)------std::unique_lock
std::unique_lock 是 C++11 中 库提供的一个灵活的互斥锁管理类,相比 std::lock_guard,它提供了更丰富的控制能力,是多线程编程中处理复杂同步逻辑的首选工具。原创 2025-08-25 17:04:47 · 806 阅读 · 0 评论 -
C++中如何使用互斥(1)------std::lock_guard
✅ 异常安全:即使临界区抛出异常,锁也会被释放✅ 自动管理:无需手动调用 unlock()✅ 代码简洁:避免忘记解锁✅ 性能高:无额外开销std::lock_guard 是 C++ 中最简单、最安全的互斥锁管理方式,应作为首选工具用于保护临界区。只要你的场景是“进入作用域加锁,离开作用域解锁”,就使用 std::lock_guard。💡 记住一句话:“加锁后立即创建 lock_guard,让它帮你管理锁的生命周期。原创 2025-08-25 16:37:44 · 617 阅读 · 0 评论 -
C++面试题(55)------二叉树的最近公共祖先
给定一个二叉树(不一定是二叉搜索树),和两个节点 p 和 q,请找出它们在这棵树中的最近公共祖先(LCA)。原创 2025-06-27 11:17:23 · 215 阅读 · 0 评论 -
C++面试题(54)------把字符串转换成整数
请你写一个函数,将字符串转换为整数(int)原创 2025-06-27 10:57:00 · 305 阅读 · 0 评论 -
C++面试题(53)------构建乘积数组
给你一个数组 A,比如 [1,2,3,4,5],你要返回一个新的数组 B。B 中的每一个元素 B[i] 是 A 中除了 A[i] 以外所有元素的乘积。不能使用除法。原创 2025-06-26 18:23:20 · 232 阅读 · 0 评论 -
C++面试题(52)------不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 +、-、*、/ 四则运算符号。原创 2025-06-25 17:54:27 · 279 阅读 · 0 评论 -
C++面试题(51)------求 1 + 2 + ... + n
求 1 + 2 + 3 + ... + n,要求不能使用乘除法、for/while/do-while/if/else/switch/case 等关键字及条件判断语句。原创 2025-06-24 18:14:38 · 246 阅读 · 0 评论 -
C++面试题(50)------股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请你计算一次交易中能获取的最大利润(卖出价 - 买入价)。原创 2025-06-24 17:46:04 · 206 阅读 · 0 评论 -
C++面试题(49)------圆圈中最后剩下的数字(约瑟夫环问题)
0, 1, ..., n-1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。原创 2025-06-24 16:50:51 · 224 阅读 · 0 评论 -
C++面试题(48)------ 扑克牌中的顺子
从扑克牌中随机抽 5 张牌,判断是不是一个顺子(即是否连续的五个点数)。原创 2025-06-24 16:13:04 · 243 阅读 · 0 评论 -
C++面试题(47)------n个骰子的点数
把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 s。输入 n(骰子个数),请输出所有可能的 s 出现的概率。原创 2025-06-24 15:45:26 · 210 阅读 · 0 评论 -
C++面试题(46)------滑动窗口的最大值
定一个数组 nums 和一个大小为 k 的滑动窗口,窗口每次向右移动一位,请找出所有窗口中的最大值。原创 2025-06-24 15:31:28 · 220 阅读 · 0 评论 -
C++面试题(45)------翻转字符串
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。原创 2025-06-24 14:49:46 · 273 阅读 · 0 评论 -
C++面试题(44)------和为s的两个数字
输入一个递增排序数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。原创 2025-06-24 14:24:39 · 255 阅读 · 0 评论 -
C++面试题(43)------数组中数值和下标相等的元素
给定一个整数数组 nums,返回所有满足 nums[i] == i 的元素的值。如果没有这样的元素,则返回一个指定的值(比如 -1 或者空列表)。原创 2025-06-23 17:39:13 · 290 阅读 · 0 评论 -
C++面试题(42)------0~n-1中缺失的数字
一个长度为 n 的递增排序数组,所有元素都在 0~n-1 范围内。理论上这个数组应该包含 0 到 n 的所有数字,但现在有且仅有一个数字缺失,请找出这个缺失的数字。原创 2025-06-23 16:22:57 · 354 阅读 · 0 评论 -
C++面试题(41)-----二叉树的深度
输入一棵二叉树的根节点,求该树的深度原创 2025-06-23 15:44:33 · 192 阅读 · 0 评论 -
C++面试题(40)------二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。原创 2025-06-23 15:20:46 · 184 阅读 · 0 评论 -
C++面试题(39)------在排序数组中查找数字
找出某个数字第一次出现的位置; 找出某个数字最后一次出现的位置; 返回该数字的起始和结束位置。原创 2025-06-23 15:09:38 · 242 阅读 · 0 评论 -
C++面试题(38)------两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。原创 2025-06-23 14:12:30 · 348 阅读 · 0 评论 -
C++面试题(37)-----数组中的逆序对(求数组中逆序对的个数)
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个“逆序对”。输入一个数组,求出这个数组中逆序对的总数。原创 2025-06-23 13:41:43 · 260 阅读 · 0 评论
分享