c++
文章平均质量分 96
码达拉
喜欢总结的马达拉先生,大三在校生一枚,欢迎一起探讨知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ IO流:从基础到实战全解析
本文介绍了C/C++中的输入输出流机制。首先分析了C语言的scanf和printf函数及其缓冲区原理,解释了缓冲区在提高可移植性和实现"行"读取中的作用。然后阐述了"流"的概念及其在C++中的实现方式,包括标准输入输出流对象(cin/cout)的使用要点和自定义类型输入输出的重载方法。详细讲解了C++文件IO流操作,涵盖ifstream、ofstream和fstream类的使用方法,以及二进制文件读写技术。最后重点介绍了stringstream类的功能,包括数值类型格原创 2025-08-27 12:53:32 · 925 阅读 · 0 评论 -
C/C++类型转换全解析
本文介绍了C++中的四种类型转换机制。相比C语言的隐式和显式转换,C++提供了更安全、语义更明确的四种转换方式:static_cast用于相关类型间的转换;reinterpret_cast用于位模式重新解释;const_cast用于修改const/volatile属性;dynamic_cast用于多态类型的运行时安全转换。文章详细分析了每种转换的适用场景、优势及注意事项,强调应避免滥用强制类型转换,特别是危险的reinterpret_cast。最后通过面试题总结了四种转换的应用场景,帮助开发者根据具体需求选原创 2025-08-27 08:00:00 · 1142 阅读 · 0 评论 -
C++类设计技巧与单例模式解析
本文介绍了C++中几种特殊类的设计方法:1. 禁止拷贝的类:C++98通过私有化拷贝构造和赋值运算符实现,C++11使用=delete语法;2. 堆/栈专属类:通过控制构造函数和operator new/delete的访问权限实现;3. 不可继承类:C++98私有化构造函数,C++11使用final关键字;4. 单例模式的两种实现:饿汉模式(程序启动即创建)和懒汉模式(首次调用时创建),重点介绍了线程安全的懒汉模式实现,包括双重检查锁定机制。这些设计模式增强了代码的安全性和可控性,适用于特定场景需求。原创 2025-08-26 13:54:25 · 885 阅读 · 0 评论 -
智能指针原理与实战解析
智能指针是C++中用于自动管理动态内存的重要工具,通过RAII(资源获取即初始化)技术确保资源在对象生命周期结束时自动释放。传统指针在异常发生时容易导致内存泄漏,而智能指针能有效解决这一问题。C++提供了多种智能指针:unique_ptr(独占所有权,禁止拷贝)、shared_ptr(共享所有权,引用计数)、weak_ptr(解决循环引用问题)。auto_ptr由于设计缺陷已被弃用。智能指针通过重载*和->运算符模拟指针行为,同时支持自定义删除器管理非new对象或数组。make_shared和make原创 2025-08-26 10:37:11 · 1439 阅读 · 0 评论 -
C++异常处理全解析
C语言传统错误处理方式包括终止程序(如assert)和返回错误码(如errno),但存在用户友好性和查找困难等问题。C++引入异常机制,通过throw抛出异常、try/catch捕获处理,支持异常重新抛出和安全规范。异常体系可采用自定义继承结构(如Exception基类派生各类异常)或标准库异常。异常优点在于错误信息清晰、调用链处理便捷,但存在执行流混乱、性能开销和资源管理风险。实际开发中应规范使用,通过基类继承统一异常类型,并用throw()声明函数异常规范以避免滥用。需注意构造函数和析构函数中的异常安全原创 2025-08-25 11:19:45 · 957 阅读 · 0 评论 -
C++11新特性全面解析(万字详解)
C++11核心特性摘要 列表初始化:支持统一初始化语法{},适用于内置类型、自定义类型及STL容器,结合std::initializer_list简化容器构造。 类型推导: auto:自动推断变量类型,需显式初始化。 decltype:获取表达式类型,用于模板编程。 智能指针:引入unique_ptr、shared_ptr等,自动管理内存,避免泄漏(需后续专题详解)。 右值引用与移动语义: 区分左值/右值,通过&&实现高效资源转移(移动构造/赋值)。 std::move强制转为右值,std:原创 2025-08-24 20:06:25 · 1185 阅读 · 0 评论 -
C++哈希表:unordered_map与unordered_set全解析
本文介绍了C++中unordered系列关联式容器的底层实现原理。重点分析了unordered_map和unordered_set的哈希表结构,包括哈希冲突的两种解决方法:闭散列(开放定址法)和开散列(链地址法)。文章详细讲解了哈希函数设计原则,并通过代码示例展示了线性探测和链地址法的具体实现。对于闭散列,解释了线性探测的原理和伪删除法的必要性;对于开散列,说明了如何通过单链表解决冲突,并讨论了扩容策略。最后比较了两种方法的优缺点,指出链地址法在存储空间利用上的优势。全文通过大量代码示例,帮助读者深入理解哈原创 2025-08-23 20:51:20 · 1160 阅读 · 0 评论 -
STL关联式容器解析:map与set详解
文章摘要:STL中的关联式容器(如map、set等)与序列式容器的主要区别在于其存储的是键值对结构,采用红黑树实现,具有高效的数据检索能力。文章详细介绍了关联式容器的特性,包括键值对概念、四种树形结构容器(map/set/multimap/multiset)的特点与使用方式,重点分析了set和map的实现原理及接口。最后展示了如何基于红黑树模拟实现map和set,包括迭代器设计、模板参数处理和核心操作实现。关联式容器通过有序存储和高效查找(O(logN)时间复杂度)满足了特定场景下的数据管理需求。原创 2025-08-22 20:41:17 · 1339 阅读 · 1 评论 -
深入解析红黑树:原理与实现
红黑树是一种自平衡二叉搜索树,通过节点颜色(红/黑)和特定规则确保最长路径不超过最短路径的两倍。其核心性质包括:根节点为黑、红色节点不连续、所有路径黑色节点数相同。插入操作分为标准BST插入和颜色调整两步,调整分为多种情况(叔叔节点红/黑)。与AVL树相比,红黑树不追求绝对平衡,插入和旋转次数更少,适合频繁修改的场景。文中提供了完整的C++实现代码,包括节点定义、旋转操作和插入逻辑。原创 2025-08-22 13:21:37 · 947 阅读 · 0 评论 -
AVL树:平衡二叉搜索树的奥秘(手撕代码)
本文详细介绍了AVL树(平衡二叉搜索树)的概念与实现。AVL树通过平衡因子(左右子树高度差绝对值≤1)保证树的平衡性,使查找效率维持在O(logn)。文章重点讲解了AVL树的插入和删除操作:插入时通过四种旋转(左单旋、右单旋、左右双旋、右左双旋)调整平衡;删除操作更复杂,需结合二叉搜索树删除逻辑和平衡因子调整。文中提供了完整的C++代码实现,包括节点结构定义、旋转函数及插入删除接口,并强调了维护父指针和平衡因子的重要性。AVL树通过严格平衡控制,有效解决了普通二叉搜索树退化为链表的问题。原创 2025-08-21 13:43:52 · 1049 阅读 · 0 评论 -
二叉搜索树的实现与应用详解
本文系统介绍了二叉搜索树(BST)的实现与应用。首先阐述了BST的基本概念和性质:左子树节点值均小于根节点,右子树节点值均大于根节点。重点讲解了BST的三大核心操作实现:查找、插入和删除,包括代码实现和不同情况的处理逻辑(如删除节点时的直接删除和替换法)。其次分析了BST的两种应用模型:K模型(纯键值存储)和KV模型(键值对存储),并提供了完整代码实现。最后讨论了BST的性能特点,指出在平衡情况下操作时间复杂度为O(logn),但在最坏情况下会退化为O(n),为后续介绍AVL树和红黑树等平衡二叉搜索树做铺垫原创 2025-08-20 11:35:09 · 992 阅读 · 0 评论 -
深入理解C++多态原理
本文系统介绍了C++多态的核心概念与实现机制。主要内容包括:1)多态的定义与构成条件,通过基类指针/引用调用虚函数时产生不同行为;2)虚函数的重写规则与两个特例(协变和析构函数重写);3)C++11的override和final关键字;4)抽象类与纯虚函数的接口继承特性;5)多态的实现原理(虚函数表机制);6)单继承与多继承下的虚表结构;7)动态绑定与静态绑定的区别。文章还解答了多态相关的常见面试问题,如虚函数表生成时机、虚析构函数必要性等,全面剖析了C++多态从语法到底层实现的全貌。原创 2025-08-19 21:09:50 · 1191 阅读 · 0 评论 -
深入理解C++继承机制
本文系统介绍了C++中的继承机制。主要内容包括:继承的基本概念和定义,基类与派生类的对象赋值转换规则,继承中的作用域问题,派生类默认成员函数的生成规则,继承与友元、静态成员的关系。重点分析了复杂的菱形继承及其带来的数据冗余和二义性问题,提出了通过虚拟继承(使用虚基表和虚基表指针)的解决方案。最后总结了继承与组合的区别,建议优先使用组合降低耦合度,仅在需要表达"is-a"关系或实现多态时使用继承。文章还提供了相关笔试面试题的解答要点。原创 2025-08-19 14:49:50 · 945 阅读 · 0 评论 -
深入浅出C++模板编程(进阶)
本文主要介绍了C++模板编程中的关键概念和技术要点。首先阐述了非类型模板参数的使用限制(如浮点数、类对象等原本不能作为参数,但C++20有所放宽)。其次详细讲解了模板特化的两种形式:函数模板特化(必须完全特化)和类模板特化(包括全特化和偏特化),并通过日期比较的实例说明了特化的实际应用。然后分析了模板分离编译导致链接错误的原因,提出了将声明定义合并在头文件中的解决方案。最后总结了模板的优点(代码复用、灵活性)和缺点(代码膨胀、错误信息难读)。全文通过丰富代码示例,系统性地介绍了模板技术的核心知识点。原创 2025-08-19 08:00:00 · 856 阅读 · 0 评论 -
深入解析C++ STL中的容器适配器(含模拟实现)
本文介绍了C++标准库中三种容器适配器:stack、queue和priority_queue的实现原理及使用方式。stack基于后进先出(LIFO)原则,默认使用deque作为底层容器;queue遵循先进先出(FIFO)原则,同样默认采用deque;priority_queue则是基于堆结构实现,默认使用vector作为底层容器。文章详细分析了各适配器的接口设计,包括push、pop、top等核心操作,并比较了不同底层容器的优缺点。重点讲解了priority_queue的仿函数机制和自定义排序规则实现方法,原创 2025-08-18 16:51:26 · 1185 阅读 · 0 评论 -
深入理解C++中的list容器(含模拟实现)
本文介绍了C++中list容器的特性、使用方法和底层实现原理。list是一种基于双向循环链表的序列容器,具有高效的任意位置插入/删除能力,但不支持随机访问。文章详细讲解了list的构造方式、迭代器使用、元素访问及修改操作,并重点分析了迭代器失效问题。通过模拟实现list的核心功能,包括节点结构、迭代器封装和基本操作(如push_back、insert、erase等),揭示了带头双向循环链表的设计优势。最后对比了list与vector的特性差异:list适合频繁插入删除的场景,而vector更适合随机访问操作原创 2025-08-18 10:35:42 · 890 阅读 · 0 评论 -
C++ vector类操作全解析(含模拟实现)
本文详细介绍了C++标准库中的vector容器及其模拟实现。主要内容包括:1. vector的基本特性:动态数组、连续存储、自动扩容机制(不同编译器采用1.5倍或2倍增长策略);2. vector的基本操作:构造方法(默认构造、拷贝构造等)、迭代器使用(正向/反向迭代器)、空间管理(resize/reserve);3. 增删查改操作:push_back/pop_back、insert/erase、find等,特别强调了迭代器失效问题;4. vector的模拟实现:框架设计(三个指针维护)、关键接口实现(re原创 2025-08-17 11:39:08 · 1398 阅读 · 0 评论 -
C++ string类操作全解析(含模拟实现)
本文介绍了C++中string类的重要性及其实现原理。首先对比了C语言字符串操作的不足:需手动管理内存、不符合面向对象思想。string类提供了更安全便捷的字符串操作,包括构造、容量管理、访问修改等接口。重点剖析了string类的模拟实现:1)深拷贝解决浅拷贝问题;2)现代写法通过swap优化赋值效率;3)详细实现了reserve、push_back、append等核心功能;4)介绍了写时拷贝机制。文章还对比了传统与现代实现方式的优劣,为理解和自定义字符串类提供了完整的技术路径。原创 2025-08-16 15:48:41 · 833 阅读 · 0 评论 -
深入浅出C++模板编程(初阶)
本文介绍了C++中的泛型编程与模板技术。主要内容包括:1)函数模板的概念与实现,通过模板可以避免函数重载带来的代码冗余;2)函数模板的原理是编译器根据实参类型生成特定版本函数;3)模板实例化的两种方式(隐式和显式)及参数匹配原则;4)类模板的定义格式和使用方法,类模板需要通过指定类型参数进行实例化。文章通过交换函数和动态顺序表示例,展示了模板在提高代码复用性和可维护性方面的优势。原创 2025-08-16 09:38:27 · 705 阅读 · 0 评论 -
C++类与对象核心知识点全解析(下)
本文深入探讨了C++面向对象编程中的关键概念。首先分析了构造函数的初始化列表与构造函数体的区别,强调初始化列表的重要性。接着讲解了static成员的特性及其应用场景,包括实现对象计数功能。文章还详细介绍了友元机制(友元函数和友元类)以及内部类的定义和使用规则。此外,还探讨了匿名对象的应用、编译器对拷贝构造的优化策略,最后从计算机认识实体的角度重新阐释了封装的意义。这些核心概念对于深入理解C++面向对象编程至关重要。原创 2025-08-15 18:29:51 · 1028 阅读 · 1 评论 -
深入解析C/C++内存管理与动态分配
本文系统介绍了C/C++中的内存管理和动态内存分配机制。首先分析了C/C++程序内存区域划分(栈、堆、数据段、代码段等),然后详细讲解了C语言的动态内存管理函数(malloc/calloc/realloc/free)及其区别。重点阐述了C++的new/delete操作符,包括其与malloc/free的关键区别:new/delete会自动调用构造函数/析构函数。文章还深入探讨了operator new/delete的实现原理,定位new表达式的作用,以及常见的内存泄漏问题。最后通过对比表格总结了malloc原创 2025-08-15 20:36:29 · 1128 阅读 · 0 评论 -
C++类与对象核心知识点全解析(中)【六大默认成员函数详解】
C++类中的6个默认成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址运算符重载和const取地址运算符重载。构造函数负责对象初始化,可重载,若无显式定义则生成默认无参构造函数。析构函数负责资源清理,自动调用,需手动释放动态分配的资源。拷贝构造函数实现对象复制,默认浅拷贝,资源管理需自定义深拷贝。赋值运算符重载支持对象赋值,默认浅赋值,资源管理需自定义。const成员函数修饰this指针保证不修改对象状态。原创 2025-08-14 20:36:55 · 963 阅读 · 0 评论 -
C++类与对象核心知识点全解析(上)
本文介绍了C++面向对象编程的核心概念,重点讲解了类与对象的基础知识。文章首先对比了C语言面向过程和C++面向对象的区别,详细说明了类的定义方式、访问限定符(public/private)、封装特性、类作用域和实例化过程。在内存模型方面,分析了类对象大小的计算规则和内存对齐原则,指出成员变量决定对象大小,成员函数存储在代码段。最后深入解析了this指针的工作原理,包括其作为隐藏参数的传递机制、特性和使用注意事项,并通过实例分析了this指针为空时的不同行为表现。这些内容构成了C++面向对象编程的基础知识体系原创 2025-08-14 11:14:22 · 591 阅读 · 0 评论 -
C->C++核心过渡语法精讲与实战
本文介绍了C++对C语言的扩展与优化,重点讲解以下核心特性:1. 命名空间解决了全局作用域中的命名冲突问题,支持嵌套定义和三种使用方式(作用域限定符、using引入部分成员、using namespace引入全部成员);2. C++输入输出使用iostream库,通过cout/cin和流运算符实现类型自适应的IO操作;3. 缺省参数支持全缺省和半缺省(必须右起连续),提高了函数灵活性;4. 函数重载通过参数类型/数量/顺序区分同名函数,其底层实现依赖编译器对函数名的修饰规则;5. 引用作为变量别名,必须初始原创 2025-08-13 21:00:55 · 1295 阅读 · 0 评论
分享