C++
文章平均质量分 91
个人学习C++的记录
程序员里程碑
记录编程学习之路
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 18智能指针:告别内存泄漏的利器
摘要:本文分析了智能指针的使用场景及其优势。传统手动管理内存方式在异常处理时易造成内存泄漏,而智能指针通过RAII(资源获取即初始化)机制自动管理资源生命周期。文章介绍了unique_ptr(独占所有权)、shared_ptr(共享所有权)和weak_ptr(解决循环引用)三种智能指针的实现原理及适用场景,并对比了它们的特点。同时探讨了内存泄漏的危害及检测方法,建议通过规范编码、使用智能指针和RAII思想来避免内存泄漏问题。智能指针能有效简化资源管理,提高代码安全性。原创 2025-12-21 18:54:06 · 965 阅读 · 16 评论 -
C++ 17异常处理:高效捕获与精准修复
摘要:C++异常处理机制通过throw抛出异常对象,由catch捕获处理,相比C语言错误码更全面。异常处理涉及栈展开、对象拷贝和析构过程,需注意异常安全和资源泄漏问题。可通过noexcept声明不抛出异常,使用标准库exception类及其派生类处理常见错误。示例展示了异常捕获、重新抛出和异常规范的使用,强调异常处理对程序健壮性的重要性。(150字)原创 2025-12-20 23:38:53 · 1138 阅读 · 10 评论 -
C++ 16:C++11新特化
摘要:C++11引入了列表初始化语法,使用{}统一初始化各类对象,包括内置类型、自定义类型和容器。右值引用(T&&)支持移动语义,提高资源利用效率,配合完美转发解决参数传递问题。可变模板参数简化了多参数处理,lambda表达式和包装器(function)使代码形式更加灵活。智能指针将在后续章节详细讨论。这些特性显著提升了C++的编程效率和代码表达能力。原创 2025-12-19 09:44:15 · 659 阅读 · 10 评论 -
C++ 15 哈希表实战:unordered_set与unordered_map详解
哈希表容器unordered_set和unordered_map基于哈希表实现,具有O(1)平均时间复杂度。主要特性包括:元素无序存储、键唯一性(unordered_set存储键,unordered_map存储键值对)。与红黑树实现的set/map相比,哈希表容器在插入/查找效率上更优(O(1) vs O(logN)),但失去有序性。哈希冲突处理采用开放地址法或链地址法,通过负载因子控制空间利用率。封装实现时需注意键类型转换(使用仿函数)、迭代器设计(单向迭代器)和扩容机制(素数大小扩容)。选择容器时应根据原创 2025-12-18 18:29:09 · 1376 阅读 · 8 评论 -
C++ 11:面向对象编程:继承与多态
摘要:本文系统讲解了面向对象编程中的继承与多态概念。继承是代码复用的重要机制,允许子类在保留父类特性的基础上进行扩展,形成层次结构。文章详细分析了继承的定义格式、访问权限变化、父子类转换规则、作用域隐藏规则等核心内容,并指出应避免使用菱形继承。多态通过虚函数重写实现,使同一方法在不同对象上表现不同行为,提高了程序灵活性。文中深入探讨了虚函数表、析构函数重写、协变、纯虚函数等技术细节,并通过实例演示了多态的实现原理。最后强调合理运用继承和多态可降低代码重复性和耦合度,建立清晰的类间逻辑关系。原创 2025-12-18 18:27:41 · 903 阅读 · 3 评论 -
C++ 15 STL容器详解:map/set与红黑树
本文介绍了STL中的关联式容器map和set,它们底层采用红黑树实现,具有高效的增删查操作(O(logN))。set是纯key搜索结构,map是key/value结构,两者都支持排序且默认升序。文章详细讲解了set和map的构造、迭代器、增删查操作,重点分析了map通过operator[]实现插入和修改的机制,以及利用仿函数实现容器定制的原理。同时对比了set/multiset和map/multimap的区别,并阐述了迭代器实现中序遍历的原理。最后指出map/set的高效性来源于红黑树结构,map的oper原创 2025-12-17 07:55:56 · 15094 阅读 · 8 评论 -
C++ 14 红黑树:高效平衡的奥秘
红黑树是一种自平衡二叉搜索树,通过节点颜色(红/黑)和四条规则确保近似平衡:1)节点非红即黑;2)根节点为黑;3)红色节点的子节点必须为黑;4)任意路径黑节点数相同。其最长路径不超过最短路径的2倍,保证操作时间复杂度为O(logN)。相比AVL树,红黑树通过更宽松的平衡条件减少了旋转次数,实际应用中性能更优。实现时需处理插入后的颜色调整(变色/旋转)以维持平衡性,主要包括处理叔叔节点为红(变色)或黑(旋转)的情况。验证时需检查路径黑节点数一致性和无连续红节点。原创 2025-12-17 07:55:23 · 6699 阅读 · 12 评论 -
C++ 13:AVL树:高效平衡二叉搜索树详解(结尾带源码)
AVL树是一种高度平衡的二叉搜索树,通过控制每个节点的平衡因子(右子树高度减左子树高度)在-1、0、1之间来保证平衡。当插入节点导致平衡因子超出范围时,通过四种旋转操作(右单旋、左单旋、左右双旋、右左双旋)重新平衡树结构。AVL树通过这种机制确保查找、插入等操作的时间复杂度稳定在O(logN)。实现中每个节点包含平衡因子和父指针,便于更新和旋转操作。验证函数检查树的高度差和平衡因子确保正确性。相比普通二叉搜索树,AVL树解决了退化为链表的问题,始终维持高效操作。原创 2025-12-16 21:44:50 · 1964 阅读 · 1 评论 -
C++ 12二叉搜索树:高效查找与插入的秘密(结尾带源码)
摘要:二叉搜索树是一种高效的数据结构,其特点是左子树节点值≤根节点≤右子树节点值。最优情况下(完全二叉树)时间复杂度为O(logN),最差情况(单支树)为O(N)。相比二分查找,二叉搜索树在插入和删除操作上更高效。文章详细介绍了二叉搜索树的实现(包括key和key-value两种形式)、基本操作(插入、查找、删除)及其应用场景(如车牌识别、单词统计等),并分析了其性能优劣。通过中序遍历可得到有序序列,删除操作需处理四种不同情况。原创 2025-12-16 21:44:12 · 16183 阅读 · 0 评论 -
C++ 10 模板进阶:参数特化与分离编译解析
摘要:模板参数分为类型形参(class/typename)和非类型形参(常量值)。模板特化包括全特化(所有参数确定)和偏特化(部分参数限制),用于特殊类型处理。分离编译时,模板声明与定义需在同一文件,否则会导致链接错误。非类型形参提供更灵活的传参方式,特化可针对特定类型定制实现,需注意分离编译问题。原创 2025-12-15 18:35:26 · 415 阅读 · 2 评论 -
C++ 9 stack_queue:数据结构的核心奥秘
本文介绍了三种常见容器适配器(stack、queue、priority_queue)的基本原理和实现。stack是后进先出(LIFO)结构,queue是先进先出(FIFO)结构,priority_queue类似堆结构。文章详细说明了各容器的关键操作如push、pop、top等,并提供了C++模拟实现代码。文中还解释了为什么选择deque作为stack和queue的默认底层容器,比较了vector、list和deque的优缺点。deque因其高效的头尾操作和较高空间利用率成为适配器的理想选择。原创 2025-12-15 18:35:00 · 819 阅读 · 1 评论 -
C++ 8:list容器详解与实战指南
C++ STL中的list是一个基于双向链表的容器,支持高效的插入和删除操作。其底层结构由节点(Node)构成,包含头节点(head)和元素个数(size)等成员。list提供多种构造方式,包括指定元素个数、区间构造和拷贝构造。主要操作包括:begin/end获取迭代器、push_front/back插入元素、pop_front/back删除元素、insert/erase在指定位置操作等。与vector相比,list不支持随机访问但插入删除更高效,但空间利用率较低。使用list时需注意迭代器失效问题,特别是原创 2025-12-14 17:45:12 · 1010 阅读 · 7 评论 -
C++ 7vector:动态数组的终极指南
C++ vector是一种动态数组容器,能够自动管理内存并提供高效的动态扩容能力。作为STL的重要组成部分,vector支持多种初始化方式(无参构造、拷贝构造、迭代器构造等),提供丰富的迭代器操作(begin/end、rbegin/rend),以及灵活的空间管理函数(resize/reserve)。使用中需注意迭代器失效问题(扩容或删除元素时),建议通过返回值更新迭代器。vector实现了深拷贝以避免内存问题,并提供插入(insert)、删除(erase)、查找(find)等常用操作。模拟实现时需特别注意内原创 2025-12-14 17:44:38 · 808 阅读 · 0 评论 -
C++ 5:模板初阶
本文介绍了C++中的函数模板和类模板。函数模板解决了函数重载代码复用率低和维护性差的问题,通过模板参数让编译器自动生成特定类型版本。函数模板分为隐式实例化(编译器自动推导类型)和显式实例化(手动指定类型)。类模板与函数模板类似,但必须显式实例化,实例化结果才是真正的类。文中通过交换函数和栈的实现示例,展示了模板的定义、使用和实例化方法,并说明了模板参数匹配规则(优先匹配非模板函数,若模板匹配更好则选择模板)。模板技术有效提高了代码的复用性和可维护性。原创 2025-12-13 21:05:54 · 421 阅读 · 4 评论 -
C++ 6 :string类:高效处理字符串的秘密
C++中string类解决了C语言字符串操作的诸多不足,提供了更安全高效的字符串处理方式。摘要要点: string类避免了C字符串手动管理内存的缺陷,符合OOP思想 常用构造函数包括默认构造、拷贝构造、子串构造等7种方式 提供了size()、capacity()等容量操作接口 支持operator[]、迭代器等访问方式 包含push_back、append等修改操作 实现了深拷贝机制,避免浅拷贝问题 现代写法采用swap优化赋值操作 建议自行实现string类并完成相关编程练习以加深理解。原创 2025-12-13 21:05:13 · 1281 阅读 · 1 评论 -
C++ 4:内存管理
C语言与C++内存管理对比:C语言使用malloc/calloc/realloc/free函数进行堆内存分配和释放,而C++增加了new/delete操作符。主要区别在于:new/delete会自动调用构造/析构函数,支持初始化,无需手动计算空间大小和类型转换;而malloc/free仅是函数调用。两者都需手动释放内存,但new失败会抛出异常而非返回NULL。C++还提供operator new/delete作为底层实现。自定义类型使用new时会自动初始化,这是与malloc的重要差异。使用时需注意类型匹配原创 2025-12-12 13:57:05 · 1222 阅读 · 4 评论 -
C++ 3 :类和对象(下)
摘要:本文深入探讨C++构造函数特性,重点分析了初始化列表的使用原则和注意事项,指出成员变量初始化顺序与声明顺序一致而非初始化列表顺序。文章还介绍了类型转换机制、static成员特性、友元函数/类的应用场景及限制条件、内部类的封装特性以及匿名对象的优势。最后阐述了编译器对对象拷贝过程的优化策略,强调初始化列表是构造函数的真正起点,各种特性共同实现了代码的灵活性与高效性。原创 2025-12-12 13:54:35 · 808 阅读 · 1 评论 -
C++ 2:类和对象(中)
摘要:C++默认成员函数包括6个核心函数(构造函数、析构函数、拷贝构造、赋值重载、取地址重载及其const版本),其中前4个最为重要。构造函数负责初始化对象而非创建空间,析构函数完成资源清理,拷贝构造实现对象复制。编译器会为未显式定义的类自动生成这些函数,但默认行为可能不满足需求:构造函数对内置类型不保证初始化,拷贝构造和赋值重载默认实现浅拷贝。特殊情况下需自定义实现,如资源管理类需深拷贝和显式析构。取地址重载通常不需自定义,除非特殊场景需控制地址访问。 (150字,完整覆盖核心概念、编译器行为及注意事项)原创 2025-12-11 07:59:51 · 912 阅读 · 7 评论 -
C++ 1 类和对象(上)
摘要:C++中类通过class或struct关键字定义,class默认成员为private,struct默认为public。类包含成员变量(属性)和成员函数(方法),建议用前缀区分成员变量。类定义新作用域,外部定义成员需使用作用域运算符。类实例化时才会分配内存空间,空类占用1字节作为标记。成员函数隐含this指针,用于区分不同对象并访问成员变量,函数内部可显式使用this但不能在参数中声明。访问限定符实现封装,public成员可外部访问,protected/private成员需通过接口访问。原创 2025-12-11 07:57:44 · 602 阅读 · 2 评论
分享