C/C++
文章平均质量分 79
分享C代码相关的学习、工作笔记。
智驾
“面朝大海,春暖花开”
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++,STL,【目录篇】
C++ Standard Template Library (STL) 是 C++ 标准库的重要组成部分,它提供了一系列通用的模板类和函数,用于实现常用的数据结构和算法。STL 的优势在于其高效性、通用性和易用性,可以极大地提高 C++ 程序的开发效率。原创 2025-01-29 20:35:33 · 2328 阅读 · 0 评论
-
C++,设计模式,【目录篇】
设计模式(Design Patterns)是软件工程中针对常见问题的可重用解决方案。它们不是具体的代码,而是经过验证的最佳实践,用于解决特定场景下的设计问题。设计模式最早由 Erich Gamma 等人在《设计模式:可复用面向对象软件的基础》一书中提出,共包含 23 种经典模式。原创 2025-01-15 03:45:00 · 1245 阅读 · 0 评论
-
SOLID原则学习【目录篇】
SOLID原则是面向对象设计(OOD)中五个核心设计原则的首字母缩写,由罗伯特·C·马丁(Robert C. Martin)在21世纪初提出。这些原则旨在提高软件的可维护性、灵活性和可扩展性。提高代码质量:遵循这些原则可以帮助你编写更干净、更可维护的代码。降低维护成本:良好的设计使得代码更易于理解和修改,从而降低长期维护成本。增强系统的灵活性和可扩展性:使得系统更容易适应变化,便于添加新功能。促进团队协作:统一的设计原则有助于团队成员之间的沟通和协作。原创 2024-11-28 13:10:23 · 588 阅读 · 0 评论
-
【C++学习笔记】北京大学《程序设计实习》目录
记录本人学习北京大学《程序设计实习》课程的笔记目录。原创 2021-01-25 23:49:49 · 363 阅读 · 1 评论
-
嵌入式C语言进阶:高效数学运算的艺术与实战
嵌入式C语言高效数学运算摘要 本文系统介绍了嵌入式系统中数学运算的优化技巧: 整数优化:利用位运算加速2的幂次乘除,使用移位和加减组合实现常数乘除 浮点替代:采用Q16.16定点数格式,通过整数运算模拟浮点操作 快速近似:给出平方根和三角函数的查表法、多项式近似等快速算法 滤波算法:优化移动平均和指数滤波实现,避免浮点运算 几何运算:基于查表的坐标旋转及快速欧氏距离近似算法 校验计算:预计算CRC表实现高效校验 全文通过具体代码示例,展示了在资源受限环境下实现高性能数学运算的实用方法,平衡了速度、精度和内存原创 2025-08-27 23:30:15 · 1059 阅读 · 0 评论 -
嵌入式C语言进阶:位操作的艺术与实战
嵌入式C语言位操作精要 本文系统介绍了嵌入式C语言开发中的位操作核心技术。主要内容包括: 七大基础位操作符(与、或、非、异或、左移、右移)及其应用场景 硬件寄存器操作最佳实践:位域定义、安全操作宏和精准控制技巧 高级位掩码技术:多bit位域操作、通用位域宏模板实现 状态机与标志管理:利用位操作实现紧凑状态存储和多设备状态监控 性能优化技巧:位操作替代昂贵运算、高效位计数算法和MSB查找方法 文章提供了大量可直接使用的代码示例,涵盖从基础操作到高级优化的完整技术栈,是嵌入式开发者提升底层编程能力的实用指南。原创 2025-08-27 23:15:39 · 1223 阅读 · 0 评论 -
嵌入式C语言进阶:结构体封装函数的艺术与实践
嵌入式C语言中的结构体封装函数技术 本文探讨了嵌入式C语言中结构体封装函数的高级编程技术。传统的C语言函数分散管理存在局限性,而通过结构体封装函数可以实现: 高内聚、低耦合的代码组织 更好的状态管理能力 类似面向对象的抽象和封装 文章详细介绍了函数指针结构体的实现模式,展示了如何结合状态数据创建完整的设备驱动接口。以UART驱动为例,演示了从接口定义到具体实现的全过程,包括操作方法表和驱动实例创建。最后还探讨了通过统一设备接口实现运行时多态的技术,为嵌入式系统提供灵活的设备管理方案。原创 2025-08-26 22:35:22 · 1473 阅读 · 0 评论 -
嵌入式C语言进阶:深入理解typedef的强大威力
嵌入式C语言中typedef的高级应用 本文深入探讨了typedef在嵌入式开发中的关键作用。typedef不仅是创建类型别名的工具,更是提升代码质量的重要武器。文章从基础用法展开,对比了typedef与#define的本质区别,详细介绍了其在硬件相关类型定义、结构体简化、函数指针抽象等场景的应用。重点展示了如何通过typedef实现驱动接口抽象、复杂类型组合,以及提高代码可读性和可移植性的具体方法。最后提供了类型命名规范和最佳实践指南,强调通过语义化类型命名来增强代码表达能力。原创 2025-08-26 07:28:52 · 587 阅读 · 0 评论 -
嵌入式C语言进阶:深入理解sizeof操作符的精妙用法
本文深入探讨了sizeof操作符在嵌入式C语言开发中的关键作用与高级应用。作为编译时操作符,sizeof不仅能获取数据类型大小,更是实现可移植、安全、高效代码的核心工具。文章系统讲解了sizeof在内存管理、数据结构对齐、数组处理、硬件寄存器映射和通信协议等场景的具体应用,并提供了类型安全用法、malloc组合使用、编译时检查等最佳实践。通过sizeof的巧妙运用,开发者可以规避常见错误,编写出更加健壮的嵌入式代码,特别是在内存受限的嵌入式环境中,这些技巧尤为重要。原创 2025-08-25 22:22:39 · 1016 阅读 · 0 评论 -
嵌入式C语言进阶:深入理解volatile关键字的精髓
嵌入式C语言中volatile关键字精要解析 本文深入探讨了嵌入式C语言中volatile关键字的核心应用场景和正确用法。volatile不是优化工具,而是保证程序正确性的关键,主要应用于四种场景:硬件寄存器访问、中断服务程序共享变量、DMA操作缓冲区和多任务环境共享数据。文章通过大量代码示例展示了volatile的正确用法,包括寄存器映射、中断标志处理、DMA缓冲区声明等,同时指出了常见误用情况,如过度使用volatile、误认为它能保证原子性等。原创 2025-08-25 00:15:00 · 812 阅读 · 0 评论 -
嵌入式C语言进阶:深入理解static关键字的三种用法
本文深入探讨了嵌入式C语言中static关键字的三种用法:静态局部变量、静态全局变量和静态函数。静态局部变量保持函数调用间的状态,节省栈空间;静态全局变量实现模块化设计,避免命名冲突;静态函数封装实现细节,优化代码结构。文章还分析了嵌入式系统中的特殊考虑,如内存分配、重入性和低功耗设计,并给出了最佳实践建议。掌握这些用法能帮助开发者编写更高效、安全的嵌入式代码。原创 2025-08-24 08:41:26 · 904 阅读 · 0 评论 -
C++ Lambda表达式入门:小白也能看懂的匿名函数
`Lambda`表达式是C++11引入的匿名函数,可以理解为“临时自定义函数”。它能让你在不定义完整函数的情况下,快速实现简单逻辑。本文将通过实际案例,带你彻底掌握`Lambda`的用法。原创 2025-06-01 21:46:45 · 709 阅读 · 0 评论 -
C++构造函数详解:从基础到高级
构造函数是C++类的重要组成部分,负责对象的初始化工作。本文将详细讲解8种构造函数的特点和使用场景,并附有简洁易懂的代码示例。原创 2025-06-01 11:10:51 · 1375 阅读 · 0 评论 -
C++ 并发编程入门:std::atomic 原子变量详解
本文详解了C++中的std::atomic原子变量在多线程编程中的关键作用。通过计数器案例展示了普通变量在多线程环境下的数据竞争问题,并对比了使用原子变量后的正确结果。文章介绍了原子变量的核心特性、基本用法、支持的操作类型及其性能优势,并对比了不同内存顺序选项的安全性和效率。同时指出了使用原子变量的常见陷阱,如复合操作仍需锁保护、运算符重载误用等问题。最后总结了原子变量的适用场景和局限性,强调其作为无锁线程安全方案的价值,但也指出复杂逻辑仍需依赖互斥锁。原创 2025-05-28 07:11:01 · 1360 阅读 · 0 评论 -
C++ 并发编程:深入理解 std::mutex 和 std::lock_guard
本文深入讲解C++并发编程中的std::mutex和std::lock_guard。首先分析多线程环境下数据竞争问题,展示未加锁情况下共享变量操作的不确定性。然后介绍std::mutex的基本用法及其手动管理锁的痛点。重点解析std::lock_guard的RAII机制,通过构造加锁、析构解锁实现自动管理,确保异常安全。文章还提供线程安全银行账户和文件写入等实际案例,并给出细化锁粒度、避免嵌套死锁等注意事项。原创 2025-05-28 00:23:38 · 1397 阅读 · 0 评论 -
从零理解 C++ 中的原子布尔变量:`std::atomic<bool>` 入门指南
在多线程编程中,使用普通的布尔变量可能会导致数据竞争、可见性问题和指令重排等线程安全问题。为了解决这些问题,C++11引入了std::atomic<bool>,它提供了原子操作,确保布尔变量的读写操作在多线程环境中是线程安全的。std::atomic<bool>通过底层硬件指令实现无锁线程安全,性能优于传统的互斥锁。此外,它还支持内存顺序控制,避免编译器和CPU的优化问题。通过一个多线程文件传输的示例,展示了std::atomic<bool>的实际应用。原创 2025-05-11 00:17:10 · 1498 阅读 · 0 评论 -
如何修改进程优先级?
本文介绍了如何通过命令和代码两种方式调整进程的优先级。命令方式包括使用 renice 修改普通进程的 nice 值和使用 chrt 修改实时进程的调度策略及优先级。renice 适用于普通进程,优先级范围为 -20 到 19,普通用户只能降低优先级,提高优先级需 sudo 权限。chrt 适用于实时进程,优先级范围为 1 到 99,需 sudo 权限,支持调度策略如 SCHED_FIFO 和 SCHED_RR。代码实现部分展示了如何在 C++ 中使用 pthread 库动态调整线程的调度策略和优先级。原创 2025-05-11 00:04:15 · 889 阅读 · 0 评论 -
【C++学习笔记】深入理解虚函数和多态
深入理解虚函数和多态原创 2025-05-01 19:05:02 · 624 阅读 · 0 评论 -
C++,设计模式,【建造者模式】
掌握建造者模式,就像拿到了对象构造的"乐高说明书"。下次面对复杂对象的组装需求,试着用这个模式解耦你的代码,让系统像模块化积木一样灵活可扩展!原创 2025-04-30 21:21:19 · 1507 阅读 · 0 评论 -
C++,设计模式,【抽象工厂模式】
抽象工厂就像一位**产品经理**,他不关心具体如何制造零件,而是确保所有组件风格统一。当你发现代码中频繁出现`switch-case`来创建相关对象时,就是抽象工厂模式大显身手的时刻!原创 2025-03-13 01:45:00 · 618 阅读 · 0 评论 -
C++,设计模式,【工厂方法模式】
某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉头:宝马订单要X5,奥迪订单要Q7,特斯拉订单要Model X…当新增顺丰冷链物流时,只需添加SF_LogisticsFactory和SF_ColdChainTransport类,原有代码无需任何修改,有效支持业务的快速扩展。该模式就像现代汽车的模块化生产平台(如大众MQB),不同车型共享基础架构但独立生产,既保证质量统一性,又满足个性化需求。当我们需要支持新的产品变体时,就像在平台上新增一个生产模块,而无需重建整个工厂。新增车型只需添加新工厂。原创 2025-02-20 22:23:33 · 1075 阅读 · 0 评论 -
C++,STL容器适配器,priority_queue:优先队列深入解析
std::priority_queue是C++标准模板库(STL)提供的容器适配器,实现优先队列数据结构。元素按优先级排序,队首始终为最大(默认)或最小元素。底层通常基于vector实现堆结构。原创 2025-02-14 21:09:45 · 932 阅读 · 0 评论 -
C++,STL容器适配器,queue:队列深入解析
std::queue是C++标准模板库(STL)提供的容器适配器,遵循先进先出(FIFO)原则。它基于底层容器(默认std::deque)封装实现,为队列操作提供统一接口。原创 2025-02-13 21:27:32 · 1267 阅读 · 0 评论 -
C++,STL容器适配器,stack:栈深入解析
std::stack是C++标准模板库(STL)提供的容器适配器,遵循后进先出(LIFO)原则。它基于底层容器(默认std::deque)封装实现,为栈操作提供统一接口。原创 2025-02-13 04:00:00 · 2064 阅读 · 0 评论 -
C++,STL容器,unordered_map/unordered_multimap:无序映射/无序多重映射深入解析
unordered_map和unordered_multimap是C++11引入的哈希关联容器,提供平均O(1)时间复杂度的键值对存储与访问能力。它们与map/multimap的核心区别在于不维护键的顺序,通过哈希表实现快速查找。原创 2025-02-12 21:42:05 · 1036 阅读 · 0 评论 -
C++,STL容器 unordered_set/unordered_multiset:无序集合/无序多重集合深入解析
unordered_set和unordered_multiset是C++11引入的哈希容器,以平均O(1)时间复杂度提供快速元素访问能力。与有序容器set/multiset不同,它们通过哈希表实现,不维护元素顺序,适用于需要高频查找但无需排序的场景。原创 2025-02-12 21:34:21 · 899 阅读 · 0 评论 -
C++,STL容器,map/multimap:映射/多重映射深入解析
在C++标准模板库(STL)中,map和multimap是两种重要的关联容器,它们基于红黑树实现,具有自动排序特性。这对容器适合需要快速查找和有序数据管理的场景。原创 2025-02-11 21:21:01 · 1286 阅读 · 0 评论 -
C++,STL 迭代器简介:概念、分类、操作
在 C++ 标准模板库(STL)中,**迭代器(Iterator)** 是连接容器(Container)与算法(Algorithm)的核心桥梁。它提供了一种统一的方式访问容器中的元素,使得算法可以独立于具体容器实现。本文将深入解析迭代器的核心概念、分类及常见操作,并通过示例代码和示意图帮助读者快速掌握其用法。原创 2025-02-10 22:38:00 · 1175 阅读 · 0 评论 -
C++,STL容器 set/multiset:集合/多重集合深入解析
通过本文的深度解析和丰富示例,读者应能全面掌握 set/multiset 的特性和应用技巧。在实际开发中,根据具体需求合理选择容器类型,充分发挥 STL 的强大威力。原创 2025-02-09 13:41:33 · 793 阅读 · 0 评论 -
C++,设计模式,【单例模式】
单例模式作为最常用的设计模式之一,其实现看似简单但陷阱众多。理解不同实现方案的特性和适用场景,结合现代C++语言特性进行合理设计,才能充分发挥其优势。建议开发者在保证必要性的前提下谨慎使用,并优先考虑更灵活的替代方案。原创 2025-02-07 20:26:37 · 1217 阅读 · 0 评论 -
C++, STL容器 array:固定大小数组深度解析
在C++标准库中,std::array是一个长期被低估的容器。作为C++11引入的现代特性,它完美融合了传统C数组的性能优势和STL容器的安全性。本文将深入探讨其设计原理,并结合实际场景分析其在内存优化中的独特价值。原创 2025-02-06 21:39:14 · 1297 阅读 · 0 评论 -
C++, STL容器 forward_list:单向链表深度解析
orward_list作为C++标准库中的轻量级容器,在特定场景下展现出无可替代的性能优势。通过深入理解其实现机制并合理运用现代C++特性,开发者能够在内存敏感型应用中构建高效可靠的数据结构。原创 2025-02-05 00:15:00 · 990 阅读 · 0 评论 -
C++, STL容器 list:双向链表深度解析
通过深入理解STL list的实现机制,开发者可以在需要高频修改操作的场景中充分发挥其性能优势,同时规避其缓存不友好的缺点。在现代C++中,结合新特性如节点操作和PMR分配器,list仍然是实现复杂数据结构的核心工具之一。原创 2025-02-02 02:45:00 · 885 阅读 · 0 评论 -
C++,STL容器 deque:双端队列的深度解析
通过深入理解deque的底层机制,开发者可以充分发挥其两端操作的高效特性,在合适的场景下获得比vector和list更优的综合性能表现。最新C++标准持续增强deque的功能性,使其在现代系统开发中保持重要地位。原创 2025-02-02 01:00:00 · 1076 阅读 · 0 评论 -
C++,vector:动态数组的原理、使用与极致优化
std::vector 是 C++ 标准模板库(STL)中最重要且高频使用的容器之一。它结合了数组的高效随机访问和动态内存管理的灵活性,是处理动态数据集合的首选工具。本文将全面剖析 vector 的实现原理、核心操作、常见陷阱及性能优化技巧,助您彻底掌握这一核心容器。原创 2025-02-01 12:00:52 · 1554 阅读 · 0 评论 -
C++,STL 命名空间:理解 std 的作用、规范与陷阱
在 C++ 中,命名空间(Namespace) 是解决代码命名冲突的核心机制。而标准模板库(STL)的所有组件均定义在 std 命名空间中。正确理解和使用 std 命名空间,不仅能避免常见错误,还能提升代码的可维护性和可移植性。原创 2025-01-31 02:30:00 · 973 阅读 · 0 评论 -
C++,STL 头文件组织:结构、分类与最佳实践
在 C++ 开发中,标准模板库(STL) 的合理使用离不开对其头文件组织的深入理解。正确包含头文件不仅能避免编译错误,还能提升代码的可读性和编译效率。本文将系统梳理 STL 头文件的分类、常见用法及注意事项,帮助开发者高效管理代码依赖。原创 2025-01-30 10:21:42 · 1176 阅读 · 0 评论 -
C++,STL 六大组件:容器、迭代器、算法、函数对象、适配器、分配器
C++ 标准模板库(Standard Template Library, STL)是泛型编程的典范,其核心思想是通过高度抽象的组件实现数据结构和算法的解耦。STL 的成功离不开其六大核心组件的协同工作:容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Functors)、适配器(Adapters)和分配器(Allocators)。这些组件各司其职,共同构建了一个高效、灵活且通用的编程框架。本文将深入解析这六大组件的功能、用法及其相互关系。原创 2025-01-30 03:00:00 · 1349 阅读 · 0 评论 -
C++,STL 简介:历史、组成、优势
C++ 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了一系列高效的数据结构和算法,极大地简化了开发者的工作。无论是处理复杂的数据操作,还是优化代码性能,STL 都已成为 C++ 开发中不可或缺的工具。本文将带您了解 STL 的历史背景、核心组成及其核心优势。原创 2025-01-29 20:33:55 · 1532 阅读 · 0 评论 -
C++,什么是协程?
协程是一种特殊的函数,可以在执行过程中暂停并在稍后恢复执行。与普通函数不同,协程可以在任意点挂起(yield)并将控制权返回给调用者,同时保留其状态,以便后续恢复执行。协程常用于异步编程、生成器、状态机等场景。C++20 引入了对协程的原生支持,使得开发者可以更方便地编写协程代码。原创 2025-01-15 03:00:00 · 2810 阅读 · 0 评论
分享