
C++基础知识
文章平均质量分 95
分享C++的学习笔记
观熵
走在AI与场景融合的前线,关注技术演进、产品迭代与智能时代的创新创业机会。
展开
-
侯捷 C++ 课程学习笔记:仿函数
仿函数是一种强大的“行为对象”,可封装函数逻辑与内部状态相较函数指针,仿函数更具可组合性、性能优势与复用性与 STL 算法、配接器、迭代器无缝配合在现代 C++ 中,lambda 表达式是仿函数的进化形式,但仿函数依然在封装逻辑、定义行为模板中占据重要地位。原创 2025-03-25 13:45:00 · 316 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:算法的形式
STL 算法本质是“形式+行为”分离的设计典范所有算法都不依赖具体容器,只依赖迭代器与行为体(函数/仿函数)多种形式组合(仿函数、配接器、lambda、bind)带来极高的表达能力掌握 STL 算法形式,有助于编写更高效、复用性强、逻辑清晰的泛型代码。原创 2025-03-25 07:56:24 · 395 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:`9std_alloc` 源码剖析
/ 每个区块大小必须是8的倍数// 小型对象最大不超过128字节// 总共16个 free list8, 16, 24, ..., 128 (共16种大小)每种大小的内存块都对应一个 free list。// 占位符,模拟实际用户数据每个 free list 实际是一个单链表,链接所有相同大小的空闲区块。9std_alloc是侯捷老师课程中最精华的一章,它不只是一个 allocator,更是一段系统级内存管理的经典实践。STL 容器背后并非单纯调用 new/delete;原创 2025-03-25 07:04:21 · 915 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:not1 / not2 深度解析 —— STL 仿函数的逻辑反转艺术
你也可以替换为lambda形式进行比较。对象功能应用场景not1一元函数逻辑反转find_ifcount_ifnot2二元函数逻辑反转mismatchsort本质函数适配器泛型算法组合逻辑替代C++11/C++17 现代写法。原创 2025-03-24 22:00:00 · 774 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:iterator_traits 深度解剖
Traits(特征萃取)是一种模板元编程技巧,用来“从类型中提取类型”。template<>它是一种编译期信息结构,用来“根据类型做不同行为选择”。就是这种思想在迭代器系统中的经典实现。在<iterator>我们以advance()算法为例,做一个简化版实现。在否则就无法参与 STL 算法!统一类型抽取接口支持原生指针类型用于算法中的静态分发(tag dispatch)保障泛型算法的安全与效率。原创 2025-03-24 17:03:34 · 713 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Tuple 用例
零开销抽象(zero-cost abstraction)tuple 不引入运行时成本;所有操作在编译期展开(例如 std::get、apply);泛型抽象能力使用模板参数包与变长参数展开;可构建任意复杂的数据结构组合;结合 STL 算法与 lambdaapplylambdafold可表达任意元组操作;可泛化数据处理流程,适配泛型编程范式。学习 tuple 不仅是掌握一个 STL 工具,更是进入现代 C++ 核心编程范式的钥匙。原创 2025-03-24 16:04:29 · 873 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Binder2nd —— STL 仿函数与绑定器的经典魅力
函数对象是重载了函数调用运算符operator()的类对象,可以像函数一样被调用,但本质上是一个类。binder2nd是 STL 中的一个函数适配器,它将一个二元函数对象的第二个参数固定住,转化成一个一元函数对象。(f, val);// true点说明定义二元函数对象转为一元函数本质函数适配器用法STL 算法中进行部分应用特点编译期类型安全,零开销缺点不如 lambda 直观。原创 2025-03-24 14:36:50 · 834 阅读 · 0 评论 -
侯捷 C++ 学习笔记:仿函数适配器与组合器机制
改变参数数量改变返回逻辑把普通函数变成仿函数将函数对象变成组合形式工具/机制功能使用时代把二元仿函数适配成一元函数C++98not1/not2取反逻辑适配器C++98ptr_fun把普通函数指针包装成仿函数C++98std::bind泛化绑定任意参数C++11+lambda一站式函数表达式C++11+组合器(And/Or)构建逻辑组合任意它们让算法的行为变得解耦、灵活、组合优雅,极大提高了 STL 的表达力。原创 2025-03-24 08:52:08 · 550 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:iterator_traits 与仿函数协作机制
仿函数(Function Object)是重载了operator()的类对象。Add add;// 等价于 add.operator()(3, 5)功能iterator_traits 提供仿函数提供类型信息抽取value_type / iterator_category 等依赖这些类型定义 operator()算法路径分发通过 tag dispatch不参与分发,但可灵活变行为行为定制不参与可自定义、可携带状态编译期效率高(模板静态展开)高(函数对象内联)使用场景。原创 2025-03-24 07:00:54 · 900 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:compose1 / compose2 深度解析 —— STL 函数组合器的艺术
名称功能组合形式参数个数compose1一元组合器f(g(x))一个参数compose2二元组合器一个参数,用于两个内函数compose2 是组合两个一元函数 → 给二元函数使用;操作对象还是一个参数,但计算了两个中间值。函数作为积木:compose 就是函数式编程的积木思想。解耦行为与算法:用 compose 构建逻辑行为,让算法复用。泛型与零运行时开销:所有行为在编译期展开,不牺牲性能。特性compose1compose2参数数量一个一个内部函数数量一个两个表达形式。原创 2025-03-24 07:00:31 · 932 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:迭代器的分类对算法的影响
public:private:只需定义,算法就能自动识别出这是 ForwardIterator,并采用相应策略。迭代器是 STL 的桥梁;其分类体系构成算法设计的基础;分类通过和驱动多态;每种迭代器限定了可用的算法与性能;自定义迭代器也可以无缝适配 STL 算法体系。一句话总结:理解迭代器分类,你就理解了 STL 的大脑。原创 2025-03-23 21:32:49 · 879 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:迭代器的分类(Category)
分类名能力范围示例容器只读访问,单向前进只写访问,单向前进读写访问,单向前进,可多次读取可双向移动listset支持随机访问+n比较等vectordeque每一类迭代器都继承了比它“弱”的那一类。public:// 假设我们内部存储为裸指针private:T* m_ptr;你可以将这个迭代器用在算法中,STL 会自动通过提取其 category 类型!它不是一种标签,而是一种能力协议它让算法与容器解耦它为泛型编程提供了能力层级。原创 2025-03-23 21:31:00 · 711 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:一个万用的 Hash Function
哈希函数(Hash Function)是将任意类型的数据“压缩”成一个固定范围的整型值的函数。快速计算分布均匀类型泛化int x, y;template<>在学习 STL 与底层实现时,我们不能满足于“直接使用”。要深入掌握 STL 容器的真正威力,必须理解底层机制,特别是哈希机制。我们学习了模板元编程与特化技巧提升了 STL 容器泛化能力构建了可组合、可扩展、可重用的 Hash 基础设施这也正是侯捷老师一再强调的:“STL 不仅要用得爽,更要看得懂,改得动,写得出。原创 2025-03-23 21:26:09 · 791 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:hashtable 深度求索
T val;每个桶指向一个链表头节点,这种“链式散列法”是 SGI STL 的主要冲突解决方式。Value: 存储的值(set 中是 key,map 中是 pair)Key: 比较用的键HashFcn: 哈希函数对象ExtractKey: 如何从Value中提取出KeyEqualKey: 比较函数对象hashtable 是数据结构界的经典,它巧妙结合数组与链表,提供几乎恒定的操作效率,是 STL 中不可或缺的基石。原创 2025-03-23 21:24:50 · 671 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:map 与 multimap 深度求索
map是唯一键的有序集合。multimap是允许重复键的有序集合。二者都基于**红黑树(Red-Black Tree)**实现,自动维护 key 的排序。节点非红即黑;根节点为黑;所有叶节点(NIL)为黑;如果一个节点为红,则两个子节点必须为黑;任意节点到其所有后代叶节点的路径包含相同数目的黑节点。维度mapmultimap是否允许重复键❌✅是否支持[]✅❌查找效率O(logN)O(logN)插入效率O(logN)O(logN)实现结构。原创 2025-03-23 21:24:00 · 614 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:set与multiset深度求索
4 2 1侯捷老师强调:“STL 是对数据结构的最合理抽象;set 是集合论与数据结构融合后的优雅表达。STL 的容器并不只是提供“功能”,它体现“行为约束”;底层红黑树的存在,让 set 的操作始终保持平衡与稳定性;泛型编程、模板参数、比较器策略,才是 C++ 高级编程的灵魂所在。在泛型算法、排序查找、统计管理、工程项目中,set和multiset提供了极大的便利。红黑树的平衡性保障自动排序 + 元素管理的强封装迭代器稳定性与泛型接口。原创 2025-03-23 21:23:18 · 622 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:RB-tree 深度求索
侯捷课程解析的RB-treeT data;红黑树,是平衡树中的“工程实践王者”。它以简洁优雅的方式在复杂操作中保持高性能。通过侯捷老师课程的讲解,我们不只学会了一种数据结构,更理解了 STL 背后的设计智慧。无论你是算法爱好者、系统开发者,还是准备面试的程序员,RB-tree 都是一块不可绕过的基石。学好它,你就能看懂 STL 的半壁江山。原创 2025-03-23 21:18:19 · 591 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:迭代器的设计原则与 Iterator Traits 在泛型设计中的作用
STL(标准模板库)里最让人惊叹的设计之一,就是其“容器 + 算法 + 迭代器”的架构三分法。算法不直接操作容器,而是依赖于迭代器抽象。// 针对指针的偏特化public:private:T* _ptr;侯捷老师在课程中说过一句让我印象深刻的话:“Iterator 是你派去容器里‘探路’的密探,Traits 是你从他身上扒下来的‘身份证’。这生动地概括了迭代器与 Traits 的配合关系:迭代器运行时负责访问,Traits 编译期提供类型信息。原创 2025-03-23 21:17:40 · 802 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Vector 的深度探索
struct A {constructdestructdestruct第一次构造是临时对象;第二次是push_back中复制构造进容器;第三个是析构临时对象;最后析构 vector 中的对象;vector 是“性能优先”与“内存友好性”的完美结合理解其内存策略、迭代器机制、异常安全,是成为优秀 C++ 工程师的基础深入 STL 的关键是“抽象思维 + 实证测试”并行。原创 2025-03-23 21:16:44 · 817 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:深度探索 list
在侯捷老师课程中,list虽非主角,却是贯穿底层设计思想的重要容器。STL 容器的设计充分考虑了稳定性 vs 性能的权衡;即使是简单的链表结构,也蕴含大量细节(如哨兵节点);list 之所以能长期存在,是因为它提供了独特的工程能力(如 splice、稳定迭代器);真正理解 STL 容器,不能只看接口,更要理解其背后的内存与数据结构设计哲学。原创 2025-03-23 21:12:51 · 636 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:源代码之分布(VG, GCC)
理解allocator是掌握 STL 内核的关键,无论在 VG 还是 GCC 下,分配器都作为模板参数穿插在所有容器中。} };侯捷老师的 C++ STL 课程是我大学阶段最有价值的技术资产之一,它不仅让我掌握了 STL 的使用,更重要的是教我去阅读源码、分析结构、构建体系思维。本文是我学习“源代码之分布(VG, GCC)”章节的一次系统总结,也希望它能对正在学习 C++ 的你有所启发。用别人的代码构建自己的认知系统,是高级程序员的必修课。原创 2025-03-23 21:11:49 · 868 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:容器之分类与各种测试
场景推荐容器快速随机访问vectordeque频繁头部插入/删除dequelist自动排序 + 唯一键查找setmap高频查找(无序)等插入频繁 + 元素顺序无关学习 STL,不只是为了掌握几个 API,而是要理解“设计容器时作者经历了怎样的思考与权衡”。侯捷老师的课程像是“打通任督二脉”,让我意识到写出高效 C++ 代码的关键不在于语法,而在于对底层机制的真正理解。原创 2025-03-23 21:09:14 · 768 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:对象模型——关于 `this`
thisthis。原创 2025-03-22 20:27:36 · 516 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:对象模型 - Dynamic Binding
动态绑定(又称或)是 C++ 多态机制的核心。当通过基类指针或引用调用虚函数时,程序会在运行时决定调用的是哪个派生类的实现。原创 2025-03-22 20:26:40 · 310 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:重载(Overloading)
C++ 提供了强大的重载机制,使得同一个函数名或操作符可以在不同的上下文中被调用,而不影响可读性和可维护性。原创 2025-03-22 20:26:05 · 399 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:谈谈 `const`
在 C++ 编程中, 关键字 是至关重要的,它不仅可以 修饰变量,还可以用于 函数、成员函数、指针、返回值、参数传递等,帮助提升代码的 安全性、可读性和优化性能。侯捷老师的 C++ 课程深入讲解了 的核心概念、不同修饰方式、如何与指针结合使用、 关键字的作用、 的使用场景,这些知识在实际项目开发中至关重要。本博客将围绕 C++ 关键字的基础概念、实际开发中的应用、最佳实践,结合详细代码示例,帮助开发者理解 在 C++ 代码中的重要作用。在 C++ 中, 用于声明不可变的对象,防止 意外修改数据。2.原创 2025-03-22 20:22:55 · 302 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:对象模型——关于 vptr 和 vtbl
C++ 作为一门支持面向对象编程(OOP)的语言,其对象模型决定了类的组织方式以及虚函数的实现机制。侯捷老师的 C++ 课程中,深入剖析了 C++ 对象模型的细节,其中vptr(虚表指针)和vtbl(虚表)是实现多态的核心。本篇笔记将从基础原理到工程实践,深入探讨vptr和vtbl的机制。原创 2025-03-22 00:13:40 · 431 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:复合 & 继承关系下的构造和析构
复合(Composition)是一种“类包含类”的关系,即一个类作为另一个类的成员。复合关系的构造和析构规则:构造顺序:先构造成员变量,再构造自身。析构顺序:先析构自身,再析构成员变量(与构造顺序相反)。原创 2025-03-21 19:18:14 · 646 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Reference(引用)
引用(Reference)是某个变量的别名,它与该变量共享相同的内存地址。int a = 10;// ref 是 a 的引用示例:引用与变量共享地址int a = 42;ref = 100;// 修改 ref 也会影响 areturn 0;特点:引用必须在声明时初始化,不能 later 赋值。修改引用会直接影响原变量。没有nullptr状态,始终绑定到一个变量。原创 2025-03-21 19:18:01 · 794 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:关于 C++ 标准库(C++ Standard Library)
C++ 标准库(C++ Standard Library)是 C++ 语言最重要的组成部分之一,它提供了,极大地提高了 C++ 的开发效率和可维护性。侯捷老师的 C++ 课程深入讲解了。本博客将围绕,并结合实际开发中的详细示例。原创 2025-03-21 19:17:39 · 562 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:模板参数(Template Parameters)
在 C++ 模板编程中,是定义泛型编程的关键,它决定了模板的行为、类型及其适用范围。侯捷老师的 C++ 课程深入讲解了,这些知识对于泛型编程和优化代码结构具有重要作用。本博客将围绕,并结合实际开发中的详细示例。原创 2025-03-21 19:17:24 · 605 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:模板偏特化(Template Partial Specialization)
模板偏特化(Template Partial Specialization)是指对部分模板参数进行特化,而其他参数仍然保持泛型化。与完全特化(Full Specialization)不同,偏特化不会完全替代原始模板,而是为特定类型组合提供优化。原创 2025-03-21 19:17:12 · 268 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Specialization(模板特化)
模板特化(Specialization)是 C++ 模板机制的高级特性,它允许我们为特定类型提供不同的实现,而不是使用通用的模板代码。原创 2025-03-21 19:16:59 · 421 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Member Template(成员模板)
成员模板(Member Template)指的是类的成员函数可以是模板函数非模板类也可以有模板成员函数。模板类可以有不同模板参数的成员模板。原创 2025-03-21 08:43:50 · 285 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Function Template
函数模板允许定义泛型函数,它可以自动适配不同的数据类型,而不需要为每种数据类型分别定义函数。模板特化允许为特定类型提供不同的实现。示例:特化bool类型// 特化 bool 类型print(42);// Generic// Boolean优势:模板特化允许针对特定类型实现不同的逻辑。适用于STL 容器、数值计算、字符串处理等场景。原创 2025-03-21 08:41:31 · 372 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Class Template
类模板允许定义泛型类,其数据成员、方法参数和返回值可以是任意类型。public:示例:使用模板创建Box类private:T value;public:");return 0;Value: 100Box<int>处理int类型,处理类型。通过泛型化使得Box类可以存储不同的数据类型。类模板的成员函数可以在类外部实现,但必须加上模板声明。public:模板特化允许为特定类型提供不同的实现。示例:特化。原创 2025-03-21 08:40:28 · 369 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:namespace(命名空间)
namespaceC++ 允许在命名空间中定义子命名空间,以更好地组织代码。匿名命名空间主要用于限制作用域,确保变量、函数只能在当前编译单元(.cpp 文件)中访问。// ✅ 允许访问// ❌ 编译错误,外部不可访问return 0;特点:类似static关键字,作用域仅限当前编译单元。适用于私有实现细节,如库的内部实现。原创 2025-03-21 08:40:07 · 587 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:深入理解 new 和 delete
C++ 的内存管理是一个复杂且关键的主题,`new` 和 `delete` 操作符是 C++ 动态内存分配的核心。侯捷老师在 C++ 课程中深入解析了 `new/delete` 的底层实现和优化策略。本篇笔记将从基础原理、内存分配机制,到大型项目中的应用,全面剖析 `new/delete`。原创 2025-03-21 06:51:12 · 235 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:深度剖析 C++ 内存管理
C++ 内存管理涉及 栈、堆、数据段、BSS 和代码段。栈管理局部变量,自动释放但易溢出;堆用于动态分配,需手动释放且易碎片化。数据段存放已初始化变量,BSS 处理未初始化变量,代码段存储可执行代码。底层依赖 虚拟内存、分页机制、TLB、Page Fault,new/delete 通过 malloc/free 调用 brk 或 mmap。优化策略包括 智能指针、对象池、对齐优化、使用 jemalloc/tcmalloc,助力高效、安全的 C++ 编程。原创 2025-03-21 06:50:02 · 579 阅读 · 0 评论 -
侯捷 C++ 课程学习笔记:Function-like Classes
仿函数(Functor)是一个行为类似函数的类,它重载了operator(),使得类的对象可以像函数一样被调用。原创 2025-03-20 07:31:46 · 323 阅读 · 1 评论