
C/C++
文章平均质量分 77
分享C代码相关的学习、工作笔记。
智驾
“面朝大海,春暖花开”
展开
-
C++,STL,【目录篇】
C++ Standard Template Library (STL) 是 C++ 标准库的重要组成部分,它提供了一系列通用的模板类和函数,用于实现常用的数据结构和算法。STL 的优势在于其高效性、通用性和易用性,可以极大地提高 C++ 程序的开发效率。原创 2025-01-29 20:35:33 · 2263 阅读 · 0 评论 -
C++,设计模式,【目录篇】
设计模式(Design Patterns)是软件工程中针对常见问题的可重用解决方案。它们不是具体的代码,而是经过验证的最佳实践,用于解决特定场景下的设计问题。设计模式最早由 Erich Gamma 等人在《设计模式:可复用面向对象软件的基础》一书中提出,共包含 23 种经典模式。原创 2025-01-15 03:45:00 · 1123 阅读 · 0 评论 -
SOLID原则学习【目录篇】
SOLID原则是面向对象设计(OOD)中五个核心设计原则的首字母缩写,由罗伯特·C·马丁(Robert C. Martin)在21世纪初提出。这些原则旨在提高软件的可维护性、灵活性和可扩展性。提高代码质量:遵循这些原则可以帮助你编写更干净、更可维护的代码。降低维护成本:良好的设计使得代码更易于理解和修改,从而降低长期维护成本。增强系统的灵活性和可扩展性:使得系统更容易适应变化,便于添加新功能。促进团队协作:统一的设计原则有助于团队成员之间的沟通和协作。原创 2024-11-28 13:10:23 · 503 阅读 · 0 评论 -
【C++学习笔记】北京大学《程序设计实习》目录
记录本人学习北京大学《程序设计实习》课程的笔记目录。原创 2021-01-25 23:49:49 · 321 阅读 · 1 评论 -
C++ Lambda表达式入门:小白也能看懂的匿名函数
`Lambda`表达式是C++11引入的匿名函数,可以理解为“临时自定义函数”。它能让你在不定义完整函数的情况下,快速实现简单逻辑。本文将通过实际案例,带你彻底掌握`Lambda`的用法。原创 2025-06-01 21:46:45 · 522 阅读 · 0 评论 -
C++构造函数详解:从基础到高级
构造函数是C++类的重要组成部分,负责对象的初始化工作。本文将详细讲解8种构造函数的特点和使用场景,并附有简洁易懂的代码示例。原创 2025-06-01 11:10:51 · 1103 阅读 · 0 评论 -
C++ 并发编程入门:std::atomic 原子变量详解
本文详解了C++中的std::atomic原子变量在多线程编程中的关键作用。通过计数器案例展示了普通变量在多线程环境下的数据竞争问题,并对比了使用原子变量后的正确结果。文章介绍了原子变量的核心特性、基本用法、支持的操作类型及其性能优势,并对比了不同内存顺序选项的安全性和效率。同时指出了使用原子变量的常见陷阱,如复合操作仍需锁保护、运算符重载误用等问题。最后总结了原子变量的适用场景和局限性,强调其作为无锁线程安全方案的价值,但也指出复杂逻辑仍需依赖互斥锁。原创 2025-05-28 07:11:01 · 928 阅读 · 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 · 744 阅读 · 0 评论 -
从零理解 C++ 中的原子布尔变量:`std::atomic<bool>` 入门指南
在多线程编程中,使用普通的布尔变量可能会导致数据竞争、可见性问题和指令重排等线程安全问题。为了解决这些问题,C++11引入了std::atomic<bool>,它提供了原子操作,确保布尔变量的读写操作在多线程环境中是线程安全的。std::atomic<bool>通过底层硬件指令实现无锁线程安全,性能优于传统的互斥锁。此外,它还支持内存顺序控制,避免编译器和CPU的优化问题。通过一个多线程文件传输的示例,展示了std::atomic<bool>的实际应用。原创 2025-05-11 00:17:10 · 927 阅读 · 0 评论 -
如何修改进程优先级?
本文介绍了如何通过命令和代码两种方式调整进程的优先级。命令方式包括使用 renice 修改普通进程的 nice 值和使用 chrt 修改实时进程的调度策略及优先级。renice 适用于普通进程,优先级范围为 -20 到 19,普通用户只能降低优先级,提高优先级需 sudo 权限。chrt 适用于实时进程,优先级范围为 1 到 99,需 sudo 权限,支持调度策略如 SCHED_FIFO 和 SCHED_RR。代码实现部分展示了如何在 C++ 中使用 pthread 库动态调整线程的调度策略和优先级。原创 2025-05-11 00:04:15 · 493 阅读 · 0 评论 -
【C++学习笔记】深入理解虚函数和多态
深入理解虚函数和多态原创 2025-05-01 19:05:02 · 530 阅读 · 0 评论 -
C++,设计模式,【建造者模式】
掌握建造者模式,就像拿到了对象构造的"乐高说明书"。下次面对复杂对象的组装需求,试着用这个模式解耦你的代码,让系统像模块化积木一样灵活可扩展!原创 2025-04-30 21:21:19 · 1350 阅读 · 0 评论 -
C++,设计模式,【抽象工厂模式】
抽象工厂就像一位**产品经理**,他不关心具体如何制造零件,而是确保所有组件风格统一。当你发现代码中频繁出现`switch-case`来创建相关对象时,就是抽象工厂模式大显身手的时刻!原创 2025-03-13 01:45:00 · 571 阅读 · 0 评论 -
C++,设计模式,【工厂方法模式】
某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉头:宝马订单要X5,奥迪订单要Q7,特斯拉订单要Model X…当新增顺丰冷链物流时,只需添加SF_LogisticsFactory和SF_ColdChainTransport类,原有代码无需任何修改,有效支持业务的快速扩展。该模式就像现代汽车的模块化生产平台(如大众MQB),不同车型共享基础架构但独立生产,既保证质量统一性,又满足个性化需求。当我们需要支持新的产品变体时,就像在平台上新增一个生产模块,而无需重建整个工厂。新增车型只需添加新工厂。原创 2025-02-20 22:23:33 · 1036 阅读 · 0 评论 -
C++,STL容器适配器,priority_queue:优先队列深入解析
std::priority_queue是C++标准模板库(STL)提供的容器适配器,实现优先队列数据结构。元素按优先级排序,队首始终为最大(默认)或最小元素。底层通常基于vector实现堆结构。原创 2025-02-14 21:09:45 · 784 阅读 · 0 评论 -
C++,STL容器适配器,queue:队列深入解析
std::queue是C++标准模板库(STL)提供的容器适配器,遵循先进先出(FIFO)原则。它基于底层容器(默认std::deque)封装实现,为队列操作提供统一接口。原创 2025-02-13 21:27:32 · 1121 阅读 · 0 评论 -
C++,STL容器适配器,stack:栈深入解析
std::stack是C++标准模板库(STL)提供的容器适配器,遵循后进先出(LIFO)原则。它基于底层容器(默认std::deque)封装实现,为栈操作提供统一接口。原创 2025-02-13 04:00:00 · 1913 阅读 · 0 评论 -
C++,STL容器,unordered_map/unordered_multimap:无序映射/无序多重映射深入解析
unordered_map和unordered_multimap是C++11引入的哈希关联容器,提供平均O(1)时间复杂度的键值对存储与访问能力。它们与map/multimap的核心区别在于不维护键的顺序,通过哈希表实现快速查找。原创 2025-02-12 21:42:05 · 825 阅读 · 0 评论 -
C++,STL容器 unordered_set/unordered_multiset:无序集合/无序多重集合深入解析
unordered_set和unordered_multiset是C++11引入的哈希容器,以平均O(1)时间复杂度提供快速元素访问能力。与有序容器set/multiset不同,它们通过哈希表实现,不维护元素顺序,适用于需要高频查找但无需排序的场景。原创 2025-02-12 21:34:21 · 732 阅读 · 0 评论 -
C++,STL容器,map/multimap:映射/多重映射深入解析
在C++标准模板库(STL)中,map和multimap是两种重要的关联容器,它们基于红黑树实现,具有自动排序特性。这对容器适合需要快速查找和有序数据管理的场景。原创 2025-02-11 21:21:01 · 1176 阅读 · 0 评论 -
C++,STL 迭代器简介:概念、分类、操作
在 C++ 标准模板库(STL)中,**迭代器(Iterator)** 是连接容器(Container)与算法(Algorithm)的核心桥梁。它提供了一种统一的方式访问容器中的元素,使得算法可以独立于具体容器实现。本文将深入解析迭代器的核心概念、分类及常见操作,并通过示例代码和示意图帮助读者快速掌握其用法。原创 2025-02-10 22:38:00 · 1099 阅读 · 0 评论 -
C++,STL容器 set/multiset:集合/多重集合深入解析
通过本文的深度解析和丰富示例,读者应能全面掌握 set/multiset 的特性和应用技巧。在实际开发中,根据具体需求合理选择容器类型,充分发挥 STL 的强大威力。原创 2025-02-09 13:41:33 · 672 阅读 · 0 评论 -
C++,设计模式,【单例模式】
单例模式作为最常用的设计模式之一,其实现看似简单但陷阱众多。理解不同实现方案的特性和适用场景,结合现代C++语言特性进行合理设计,才能充分发挥其优势。建议开发者在保证必要性的前提下谨慎使用,并优先考虑更灵活的替代方案。原创 2025-02-07 20:26:37 · 1129 阅读 · 0 评论 -
C++, STL容器 array:固定大小数组深度解析
在C++标准库中,std::array是一个长期被低估的容器。作为C++11引入的现代特性,它完美融合了传统C数组的性能优势和STL容器的安全性。本文将深入探讨其设计原理,并结合实际场景分析其在内存优化中的独特价值。原创 2025-02-06 21:39:14 · 1183 阅读 · 0 评论 -
C++, STL容器 forward_list:单向链表深度解析
orward_list作为C++标准库中的轻量级容器,在特定场景下展现出无可替代的性能优势。通过深入理解其实现机制并合理运用现代C++特性,开发者能够在内存敏感型应用中构建高效可靠的数据结构。原创 2025-02-05 00:15:00 · 858 阅读 · 0 评论 -
C++, STL容器 list:双向链表深度解析
通过深入理解STL list的实现机制,开发者可以在需要高频修改操作的场景中充分发挥其性能优势,同时规避其缓存不友好的缺点。在现代C++中,结合新特性如节点操作和PMR分配器,list仍然是实现复杂数据结构的核心工具之一。原创 2025-02-02 02:45:00 · 758 阅读 · 0 评论 -
C++,STL容器 deque:双端队列的深度解析
通过深入理解deque的底层机制,开发者可以充分发挥其两端操作的高效特性,在合适的场景下获得比vector和list更优的综合性能表现。最新C++标准持续增强deque的功能性,使其在现代系统开发中保持重要地位。原创 2025-02-02 01:00:00 · 926 阅读 · 0 评论 -
C++,vector:动态数组的原理、使用与极致优化
std::vector 是 C++ 标准模板库(STL)中最重要且高频使用的容器之一。它结合了数组的高效随机访问和动态内存管理的灵活性,是处理动态数据集合的首选工具。本文将全面剖析 vector 的实现原理、核心操作、常见陷阱及性能优化技巧,助您彻底掌握这一核心容器。原创 2025-02-01 12:00:52 · 1355 阅读 · 0 评论 -
C++,STL 命名空间:理解 std 的作用、规范与陷阱
在 C++ 中,命名空间(Namespace) 是解决代码命名冲突的核心机制。而标准模板库(STL)的所有组件均定义在 std 命名空间中。正确理解和使用 std 命名空间,不仅能避免常见错误,还能提升代码的可维护性和可移植性。原创 2025-01-31 02:30:00 · 804 阅读 · 0 评论 -
C++,STL 头文件组织:结构、分类与最佳实践
在 C++ 开发中,标准模板库(STL) 的合理使用离不开对其头文件组织的深入理解。正确包含头文件不仅能避免编译错误,还能提升代码的可读性和编译效率。本文将系统梳理 STL 头文件的分类、常见用法及注意事项,帮助开发者高效管理代码依赖。原创 2025-01-30 10:21:42 · 1040 阅读 · 0 评论 -
C++,STL 六大组件:容器、迭代器、算法、函数对象、适配器、分配器
C++ 标准模板库(Standard Template Library, STL)是泛型编程的典范,其核心思想是通过高度抽象的组件实现数据结构和算法的解耦。STL 的成功离不开其六大核心组件的协同工作:容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Functors)、适配器(Adapters)和分配器(Allocators)。这些组件各司其职,共同构建了一个高效、灵活且通用的编程框架。本文将深入解析这六大组件的功能、用法及其相互关系。原创 2025-01-30 03:00:00 · 1124 阅读 · 0 评论 -
C++,STL 简介:历史、组成、优势
C++ 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了一系列高效的数据结构和算法,极大地简化了开发者的工作。无论是处理复杂的数据操作,还是优化代码性能,STL 都已成为 C++ 开发中不可或缺的工具。本文将带您了解 STL 的历史背景、核心组成及其核心优势。原创 2025-01-29 20:33:55 · 1429 阅读 · 0 评论 -
C++,什么是协程?
协程是一种特殊的函数,可以在执行过程中暂停并在稍后恢复执行。与普通函数不同,协程可以在任意点挂起(yield)并将控制权返回给调用者,同时保留其状态,以便后续恢复执行。协程常用于异步编程、生成器、状态机等场景。C++20 引入了对协程的原生支持,使得开发者可以更方便地编写协程代码。原创 2025-01-15 03:00:00 · 1640 阅读 · 0 评论 -
SOLID原则学习,依赖倒置原则(Dependency Inversion Principle, DIP)
依赖倒置原则通过引入抽象接口,解耦了高层模块和低层模块,使得系统更加灵活、可扩展和易于维护。在实际开发中,遵循依赖倒置原则可以帮助我们设计出更加健壮和可复用的代码。原创 2025-01-11 03:30:00 · 877 阅读 · 0 评论 -
SOLID原则学习,接口隔离原则(Interface Segregation Principle, ISP)
接口隔离原则是面向对象设计中的五大原则(SOLID)之一,由Robert C. Martin提出。其核心思想是:客户端不应该依赖它们不需要的接口。换句话说,一个类不应该被迫实现它不需要的方法。接口应该尽量细化,每个接口只负责一个特定的功能,而不是将所有功能都集中在一个庞大的接口中。原创 2025-01-10 22:34:39 · 792 阅读 · 0 评论 -
SOLID原则学习,里氏替换原则(Liskov Substitution Principle, LSP)
里氏替换原则的核心是确保子类可以完全替换父类而不影响程序的正确性。通过合理设计类的继承关系,避免子类修改父类的行为,可以提高代码的可维护性和可扩展性。在实际开发中,如果发现子类无法完全替换父类,可能需要重新审视类的设计,考虑使用组合或其他设计模式来解决问题。原创 2025-01-09 23:54:27 · 1082 阅读 · 0 评论 -
SOLID原则学习,开闭原则(Open Closed Principle, OCP)
开闭原则是面向对象设计中的重要原则,它鼓励我们通过扩展而不是修改来增加系统的功能。通过使用抽象和多态,我们可以设计出符合开闭原则的系统,从而提高代码的可维护性和可复用性。原创 2025-01-09 23:32:08 · 1243 阅读 · 0 评论 -
SOLID原则学习,单一职责原则(Single Responsibility Principle, SRP)
单一职责原则通过将类的职责分离,使得每个类都专注于一个功能领域,从而提高了代码的可维护性、可复用性和可测试性。在实际开发中,遵循SRP可以帮助我们设计出更加清晰、灵活的软件系统。原创 2025-01-08 22:22:26 · 649 阅读 · 0 评论 -
C++,内存拷贝操作建议与示例
优先使用标准库函数进行内存拷贝。注意内存重叠问题,使用std::memmove处理重叠区域。确保目标缓冲区足够大,避免溢出。使用std::copy进行类型安全的拷贝。避免不必要的拷贝,使用引用或指针传递大数据结构。使用智能指针管理动态内存,避免内存泄漏。遵循这些建议可以提高代码的安全性和效率。原创 2025-01-08 00:31:55 · 523 阅读 · 0 评论 -
C++,如何写单元测试用例?
编写单元测试用例是C++开发中不可或缺的一环。通过选择合适的测试框架、编写完善的测试用例,并结合自动化测试工具,可以提高代码的测试覆盖率和效率,确保代码的质量和稳定性。希望本文能够为您在C++单元测试方面提供有益的指导。原创 2024-08-29 18:48:31 · 1825 阅读 · 0 评论