
C++基础
文章平均质量分 92
围绕 C++ 基础语法、面向对象编程等核心内容展开,结合代码实例解析,帮助读者掌握 C++ 编程逻辑,夯实语言基础,为进阶学习铺路。
南玖yy
专栏有更系统的学习哦(从下往上)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解 C++ 中的 list 容器:从基础使用到模拟实现
本文深入探讨了C++中list容器的底层数据结构、核心特性、迭代器系统、接口实现原理、空间管理与性能特征,以及其典型应用场景与最佳实践。list基于双向循环链表实现,每个节点包含数据、前驱和后继指针,通过哨兵节点简化边界条件处理。其核心特性包括双向迭代、常数时间插入删除等。迭代器系统通过模板参数设计支持正向和反向遍历,并详细解析了插入、删除等操作的实现逻辑。list在频繁中间插入删除、无序数据重组等场景中表现优异,但需注意避免小对象存储和迭代器失效等问题。与vector相比,list在插入删除操作上具有优势原创 2025-06-02 01:06:24 · 1330 阅读 · 0 评论 -
C++ 类模板三参数深度解析:从链表迭代器看类型推导与实例化(为什么迭代器类模版使用三参数?实例化又会是怎样?)
本文深入解析了C++双向链表迭代器设计中的三模板参数机制。通过拆解T(元素类型)、Ref(引用类型)和Ptr(指针类型)三个参数的协同作用,揭示了迭代器如何实现类型通用性和读写分离。文章从内存视角详细展示了模板实例化过程,对比了三参数与单参数设计的优劣,并通过完整实例演示了从定义到调用的全链路。这种设计模式体现了C++泛型编程的哲学,在保证类型安全和零开销的前提下,实现了一套代码支持多种数据类型的复用机制,为理解STL容器设计提供了重要参考。原创 2025-06-02 01:05:10 · 856 阅读 · 0 评论 -
从 0 到 1 吃透 C++ vector:这可能是最详细的保姆级教程,模拟实现vector
本文全面解析C++中vector容器的核心特性和应用方法。首先介绍vector作为动态数组的本质,对比其与静态数组和其他容器的区别;然后详细讲解构造方式、空间管理、增删查改等基本操作,重点剖析迭代器失效原理及解决方案。通过模拟实现vector底层机制,揭示其扩容策略和内存管理原理,特别指出memcpy在自定义类型拷贝中的隐患。此外,文章深入探讨动态二维数组的使用技巧,结合杨辉三角等OJ题目展示vector的实际应用,并总结常见误区和最佳实践。最后强调vector的核心价值在于高效随机访问和自动内存管理,建议原创 2025-05-28 14:59:51 · 1351 阅读 · 0 评论 -
深入剖析C++ string类:从基础到实战的终极指南
C++中的string类解决了C语言字符串在内存管理、安全性和功能上的缺陷,通过封装动态内存、提供丰富接口成为高效安全编程的基础。它支持多样化初始化、灵活的内存优化和便捷的访问遍历,非成员函数拓展了输入输出与比较能力。手写string类需掌握深拷贝、内存管理等核心实现细节。实战中,string类在反转字符串、字符串相加等高频面试题中体现算法思维,而C++17的string_view、移动语义等进阶知识助力性能优化。掌握string类不仅是理解STL容器的关键,更是应对开发需求与面试挑战的必备技能。原创 2025-05-26 00:18:44 · 1338 阅读 · 0 评论 -
C++ 仿函数完全指南:从零基础到高级技巧
一句话解释:仿函数(Functor)就是让类的对象可以像函数一样被调用。它的本质是一个类,但行为像函数。举个生活例子:想象有一个计算器,它可以执行加法、减法等操作。传统函数就像是固定功能的计算器(比如只能加法),而仿函数就像是可编程计算器,可以根据需要切换功能,还能记住之前的计算结果。1. 可以保存状态(像有记忆的函数)普通函数执行完就忘了之前的事,但仿函数可以通过成员变量记住状态。示例:统计函数调用次数2. 可以定制行为(像可调节的工具)通过模板和参数,仿函数可以灵活调整功能。示例:定制排序原创 2025-05-12 22:30:20 · 913 阅读 · 1 评论 -
深入理解 C++ 标准模板库(STL):从基础到实践
STL(Standard Template Library,标准模板库)是C++ 标准库的核心组成部分,它不仅是一套可复用的组件库,更是一 个融合了数据结构与算法的泛型编程框架。其设计理念是通过模板技术实现 “与类型无关” 的通用代码,让开发者能够高效处理各种数据操作,而无需重复造轮子。STL 是 C++ 泛型编程的集大成者,它将数据结构与算法的通用性推向了新高度。从面试中的底层原理考察,到工作中的高效开发实践,STL 的重要性不言而喻。原创 2025-05-13 20:04:14 · 947 阅读 · 0 评论 -
【C++ 模板初阶】从 “代码复制粘贴” 到 “万能模具”:轻松理解泛型编程(模板实例化:隐式实例化,显式实例化.类模板)
模板就像一个 “代码模具”,用<>声明模板参数,用typename(或classtemplate <typename T> // 声明模板参数Tvoid Swap(T& a, T& b) { // 用T代替具体类型T temp = a;a = b;b = temp;typename和class等价,推荐用typename更清晰模板参数可以有多个,如原理:类模板允许我们定义一个通用的类,其中的某些成员变量或成员函数的类型可以通过模板参数来指定。原创 2025-05-13 20:03:43 · 859 阅读 · 0 评论 -
C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
本文深入探讨了C/C++内存管理的核心概念与最佳实践。首先,文章分析了C/C++程序的内存分布,包括内核空间、栈区、堆区、数据段和代码段,解释了各区域的功能与管理方式。接着,详细解析了C语言中的动态内存管理函数(malloc、calloc、realloc、free)及其使用场景,并对比了C++中的new/delete操作符,强调了其在自定义类型中的构造与析构功能。文章还介绍了定位new表达式及其在内存池技术中的应用。最后,总结了malloc/free与new/delete的深度对比,并提供了内存管理的最佳实原创 2025-05-12 15:10:30 · 2110 阅读 · 7 评论 -
C++ 类与对象(下)—— 进阶特性与底层机制解析(构造函数初始化,类型转换,static成员,友元,内部类,匿名对象)
初始化列表和在构造函数里赋值各有各的好。要是成员变量能直接设定初始值,或者是引用类型、const类型的变量,用初始化列表比较好;要是初始化过程复杂,或者为了让代码更清楚,就在构造函数里赋值。得根据实际情况来选择用哪种方式。如果成员是自定义类型,并且在初始化列表中没有显式初始化,那么会调用该自定义类型的默认构造函数。若该自定义类型没有默认构造函数,就会导致编译错误。// 自定义类型,有默认构造函数public:std::cout << "SubClass 默认构造函数被调用" << std::endl。原创 2025-05-05 14:00:36 · 2262 阅读 · 3 评论 -
C++ 类与对象(中)—— 默认成员函数与运算符重载的深度解析:构造函数,析构函数,拷贝构造函数,赋值运算符重载,普通取地址重载,const取地址重载
默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后期再讲解。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去了解:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。原创 2025-04-28 00:00:00 · 2684 阅读 · 11 评论 -
C++ 类与对象(上):从基础定义到内存布局的深度解析(this指针,实例化,类的定义)
在 C++ 中,class关键字用于定义一个类,它是数据(成员变量)与操作(成员函数)的集合体。// 访问限定符(public/private/protected)public: // 公共成员,类外可直接访问// 成员函数声明(可直接定义或在类外实现)// 构造函数(与类同名,无返回值,用于对象初始化)// 析构函数(名称为~ClassName,无参数,用于资源释放)protected: // 保护成员,类外不可访问,派生类可访问// 受保护的成员变量或函数。原创 2025-04-24 15:53:11 · 1870 阅读 · 3 评论 -
C++ 成员变量缺省值:引用、const 与自定义类型的初始化规则详解,引用类型和const类型的成员变量自定义类型成员是否可以用缺省值?
允许设置缺省值,但要求自定义类型必须有默认构造函数。public:MyClass() { /* 默认构造函数 */ }// 合法!调用MyClass默认构造函数public:public:NoDefaultCtor(int arg) { /* 带参构造函数 */ }// 未定义默认构造函数!// ❌ 编译错误!// 错误原因:NoDefaultCtor没有默认构造函数,无法初始化const成员public:public:} // 默认构造函数。原创 2025-04-28 10:52:25 · 1043 阅读 · 1 评论 -
C++ 类模板:从普通类到通用蓝图的跨越,普通类和类模版的类名和类型有什么区别?
普通类是一种具体的数据类型定义,它包含成员变量和成员函数,用于描述具有特定属性和行为的对象。让我们来看一个简单的Studentprivate:int age;public:在这个例子中,Student类封装了学生的姓名和年龄信息,并提供了一个构造函数来初始化这些信息,以及一个函数来显示学生的信息。类模板是一种通用的 “类框架”,它允许我们定义一个类,其中的某些类型可以在使用时通过模板参数来指定。以Stackprivate:T* data;int top;原创 2025-05-01 01:45:00 · 1096 阅读 · 1 评论 -
C++ 隐式转换与显式转换:从原理到实践
就像你给朋友发消息:“给我 2 杯奶茶”,朋友知道 “2” 是 “2 杯”,不需要你说 “2 杯 = 2 杯”,电脑也能 “理解” 这种简单、安全的转换。就像你要把 “1.75 米” 的身高转成 “175 厘米”,必须明确说 “1.75 米 = 175 厘米”,不能让电脑自己猜。就是电脑看不懂你想怎么转换,或者转换可能有风险,你必须亲自写代码告诉它:“我要把这个类型变成那个类型,出问题我自己负责!就是你写代码时,不需要自己动手,电脑(编译器)自动帮你把一种类型 “变成” 另一种类型。原创 2025-04-29 02:02:23 · 1015 阅读 · 3 评论 -
深入理解 C++ 三法则:资源管理的关键准则
C++ 三法则指出,当一个类需要显式定义析构函数、拷贝构造函数或拷贝赋值运算符中的任意一个时,就必须同时显式定义这三个函数。这三个函数在资源管理中扮演着不同但又相互关联的角色,它们共同构成了一个完整的资源管理体系。析构函数(Destructor):负责在对象生命周期结束时释放类中管理的资源,例如使用delete释放动态分配的内存,关闭打开的文件等。拷贝构造函数(Copy Constructor):用于以现有对象为模板创建新对象时执行深拷贝操作,确保新对象拥有独立的资源副本,而不是简单地复制指针地址。原创 2025-04-25 16:55:57 · 805 阅读 · 0 评论 -
编程小白的 C++ 入门宝典:从基础到进阶(函数重载,引用,内联函数,auto 关键字)
函数重载是函数的一种特殊情况,在 C++ 里,允许在同一作用域中声明几个功能类似的同名函数。这些同名函数的形参列表必须满足以下条件:参数个数不同,或者参数类型不同,又或者参数类型的顺序不同。需要特别注意的是,返回值类型并不影响函数重载的判定。函数重载的存在,主要是为了处理那些功能类似但数据类型不同的问题。它就如同我们生活中的多功能工具,一把螺丝刀可以通过更换不同的刀头来拧不同类型的螺丝,而函数重载则让同一个函数名根据不同的参数类型和个数,执行不同的操作。原创 2025-04-19 00:56:25 · 1096 阅读 · 2 评论 -
编程小白的 C++ 入门宝典:从基础到入门(命名空间,输入输出,缺省参数)
在一个大型的编程项目里,不同的程序员或者代码模块可能会使用相同的变量名、函数名。这就好比在一个班级里有两个同学都叫 “小明”,老师喊 “小明” 的时候,就不知道具体指的是哪个同学了,这就是命名冲突。是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或类型顺序)不同(返回值没有要求),常用来处理实现功能类似数据类型不同的问题。引用就是给变量起了一个别名,它们共享同一块内存地址。就像一个人有大名和小名,叫哪个名字都能找到这个人。原创 2025-03-22 20:59:59 · 1073 阅读 · 1 评论