- 博客(63)
- 收藏
- 关注
原创 C++基础:Stanford CS106L学习笔记 15 RAII&智能指针&构建C++工程
本文介绍了C++中的异常处理和RAII(资源获取即初始化)编程范式。主要内容包括:1)异常处理机制及其在多处代码路径中可能引发的异常情况分析;2)RAII的核心思想,通过构造函数获取资源、析构函数自动释放资源来避免内存泄漏;3)RAII在动态内存、文件操作和线程锁等场景的应用示例;4)三种智能指针(unique_ptr、shared_ptr和weak_ptr)的基本概念和使用方法。文章强调RAII是C++资源管理的基石,能有效解决手动资源管理导致的泄漏问题,建议用智能指针替代显式的new/delete操作。
2025-12-21 16:53:43
951
原创 C++基础:Stanford CS106L学习笔记 14 类型安全 & `std::optional`
本文探讨了C++中的类型安全和std::optional的用法。类型安全指编程语言防止类型错误的能力,通过示例说明未检查容器空状态和空指针解引用会导致未定义行为。介绍了std::optional(C++17)作为安全处理可能缺失值的方案,包含.value()、.value_or()和.has_value()等方法。最后讲解了C++23引入的Monadic操作(transform、and_then、or_else),它们通过链式调用自动处理值存在与否的情况,避免显式条件判断,使代码更简洁安全。
2025-12-21 15:57:54
880
原创 C++基础:Stanford CS106L学习笔记 13 特殊成员函数(SMFs)
C++中的特殊成员函数包括6个与对象生命周期管理和值传递相关的函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数和移动赋值运算符。这些函数会在未显式定义且程序需要时自动生成。拷贝构造和拷贝赋值需要实现深拷贝以避免指针共享问题,而移动操作则通过转移资源所有权提高效率。使用delete关键字可以禁用特定特殊成员函数,防止不安全的对象操作。对于包含不可赋值成员(如const或引用)的类,必须通过初始化列表进行初始化。特殊成员函数的合理使用对资源管理和性能优化至关重要。
2025-12-20 10:55:19
986
原创 C++基础:Stanford CS106L学习笔记 12 运算符重载
本文介绍了C++中运算符重载的概念与应用。运算符重载允许自定义类像内置类型一样使用运算符,可通过成员或非成员函数实现。非成员重载更灵活,但需配合友元机制访问私有成员。文章强调运算符应遵循最小惊讶原则,保持语义清晰,并建议使用相反规则(如同时定义==和!=)。通过StanfordID类的示例展示了运算符重载的具体实现方法,包括比较运算符的定义和友元函数的使用。
2025-12-20 09:32:06
754
原创 C++基础:Stanford CS106L学习笔记 10 函数模板(Function Templates)
本文介绍了C++函数模板的核心概念与应用。主要内容包括:通过min函数示例展示模板替代函数重载的优势;详细讲解显式/隐式实例化的使用方法及注意事项;针对不同类型参数的解决方案(双模板参数+auto返回值);迭代器中的模板应用实例。特别探讨了C++20引入的concept机制,用于提前检测类型约束问题。最后深入解析了可变参数模板的实现原理,通过递归展开处理任意数量参数,并展示了异构参数的处理能力。全文系统性地呈现了模板编程从基础到进阶的关键技术点。
2025-12-14 18:13:44
663
原创 C++基础:Stanford CS106L学习笔记 9 类模板(Class Templates)
本文介绍了C++模板的基本概念及其在类模板中的应用。通过将int_vector、double_vector等相似逻辑的类合并为单一的vector模板,展示了模板如何实现代码复用和类型抽象化。重点讨论了类模板的声明、实现方式(包括仅头文件库和显式实例化方法),以及模板实例化后生成完全独立类型的特点。同时指出了模板使用可能导致程序体积增大和编译时间延长的问题,并比较了模板类与普通类在编译和运行时的差异。
2025-12-14 16:54:10
660
原创 C++基础:Stanford CS106L学习笔记 8 继承
本文介绍了面向对象编程中的继承机制及其实现。继承允许一个类(子类)从另一个类(基类)继承属性和方法,支持IS-A关系、动态多态性和可扩展性。文章通过几何形状类的示例展示了继承的实现方式,包括纯虚函数的使用。同时讨论了三种继承类型(公有、保护和私有)及其访问权限差异,重点指出公有继承最适合IS-A关系。针对多重继承中的菱形问题,提出虚拟继承解决方案。最后通过实例说明继承如何减少代码冗余并提高可维护性,展示了继承在对象交互设计中的优势。
2025-12-14 16:12:11
811
原创 C++基础:Stanford CS106L学习笔记 7 类
本文介绍了C++中类的核心概念与应用。首先对比了C语言与C++在面向对象编程上的差异,强调类实现了数据与方法的封装。详细解析了类与结构体的区别,指出类具有访问控制机制。重点阐述了类的设计要素:构造函数(包括默认构造、参数构造和this关键字的使用)、私有成员变量、公有成员函数接口以及析构函数。通过StanfordID类的完整示例展示了类定义与实现的典型结构(头文件与源文件分离)。最后说明了C++类对象的存储机制,指出数据存储在对象中而函数单独存储的特点。全文系统性地呈现了C++类的基础知识体系。
2025-12-08 12:00:48
825
原创 C++基础:Stanford CS106L学习笔记 6 迭代器
迭代器是C++中用于遍历容器元素的通用接口,其行为类似于指针但更通用。所有标准容器都提供begin()和end()方法返回迭代器,分别指向首元素和"尾后"位置。迭代器支持解引用(*it)、递增(++it)和比较(==)等操作,使得不同容器的遍历方式统一。前缀++it直接返回更新后的迭代器,而后缀it++需保存旧值再递增。迭代器抽象了底层数据结构差异,让开发者无需关心具体实现就能遍历各种容器。使用时需注意不要解引用或递增尾后迭代器,否则会导致未定义行为。
2025-12-06 11:36:53
773
原创 C++基础:Stanford CS106L学习笔记 5 内存与指针
程序运行时,操作系统会为其分配地址空间,包含共享内存、栈、堆、全局变量和指令段等区域。栈用于存储函数调用和局部变量,遵循先进后出原则,但空间有限且变量生命周期受限。堆则支持动态内存分配,克服了栈的局限性,但需要手动管理且性能较低。指针是C++中访问内存地址的特性,存储对象的地址并允许直接操作内存。指针类型T*指向类型为T的对象,解引用可获取实际值。栈溢出和内存管理是使用指针时需注意的关键问题。
2025-12-02 22:51:03
1296
原创 C++基础:Stanford CS106L学习笔记 4 容器(关联式容器)
本文介绍了C++中的关联式容器,包括map和set等有序容器的使用要求与操作方法。重点说明了容器元素必须支持比较运算符或自定义比较函数,详细列举了map的常见操作如插入、查找、删除等,并指出使用[]访问可能意外插入默认值的特性。文章还对比了三种自定义比较方式:重载运算符、函数对象和lambda表达式,为开发者提供了灵活的选择方案。最后提醒了访问不存在的键可能导致意外插入的问题。
2025-12-02 17:16:29
1062
原创 C++基础:Stanford CS106L学习笔记 4 容器(STL与序列容器)
本文介绍了C++标准模板库(STL)的核心概念和常用容器。STL主要包括容器、算法和迭代器三大部分,其中容器分为序列容器和关联容器。重点讲解了序列容器中的std::vector和std::deque: std::vector是最常用的动态数组,支持随机访问,但在前端插入效率较低 std::deque是双端队列,支持高效的前后端插入/删除操作 文中比较了两者的实现机制和适用场景,并给出了使用建议,如优先使用范围for循环和const auto&避免拷贝 此外还区分了STL的组成部分和非STL的标
2025-12-02 16:25:34
1152
原创 C++基础:Stanford CS106L学习笔记 3 流
本文介绍了C++中的流(Stream)机制,重点讲解了输入输出流的抽象概念和具体应用。主要内容包括:1)流的基本概念,如std::cout和std::cin分别作为输出流和输入流的实例;2)stringstream的使用方法,展示了如何将字符串作为流处理,以及getline()函数的用法;3)输出流的详细介绍,包括std::cout、std::endl与'\n'的区别,以及cerr和clog的不同用途;4)文件流的操作,通过std::ofstream和std::ifstream示例演示了文件的读写操作。文章
2025-12-02 15:54:07
706
原创 C++基础:Stanford CS106L学习笔记 2 初始化与引用
本文介绍了C++中的三种初始化方式:直接初始化(C++98)、统一初始化(C++11)和结构化绑定(C++17)。直接初始化存在窄化转换问题,统一初始化通过{}语法强制类型安全,但可能与函数重载规则冲突。结构化绑定支持从固定大小数据结构中解构变量。此外,文章还讨论了引用传递与值传递的区别,以及左值和右值的概念,强调右值是临时值不能通过引用传递。
2025-12-02 12:01:22
466
原创 C++基础:Stanford CS106L学习笔记 1 类型与结构
本文介绍了C++的类型系统和结构体特性。在类型系统方面,C++采用静态类型,变量类型一旦确定不可更改,与Python的动态类型形成对比。静态类型能提高效率并减少运行时错误。文章还介绍了using类型别名、auto类型推断以及函数重载等现代类型特性。在结构体方面,展示了如何定义和使用结构体,以及使用std::pair模板简化多值返回的实现方式。通过对比Python和C++的代码示例,突出了C++在类型安全性和编译时检查方面的优势。
2025-12-02 11:29:21
361
原创 数字信号处理翻转课堂笔记20——FIR滤波器各种结构(直接型、级联型、线性相位结构、频率采样结构)
FIR滤波器的各种结构(直接型、级联型、线性相位结构、频率采样结构)
2023-11-24 17:47:08
8794
1
原创 数字信号处理翻转课堂笔记19—等波纹最佳逼近法设计FIR滤波器及matlab实现&IIR与FIR对比&FilterDesigner应用
等波纹最佳逼近FIR数字滤波器及matlab实现;IIR&FIR;filterDesigner应用
2023-11-21 20:34:48
5704
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅