- 博客(20)
- 收藏
- 关注
原创 C++:vector(2)
上一篇文章我们讲了vector的使用和基本介绍,这一篇我们来通过模拟实现vector的方式来逐步深入了解vector的底层。
2025-12-31 21:41:36
667
原创 C++:vector(1)
在数学/物理领域,vector的中文意思是:“向量”。在 C++ 标准库 中,std::vector是一个动态数组容器,中文常直接称为vector容器,也可意译为动态数组。所以由此可见,vector的底层实际上就是顺序表。我们可以看到这里的vector是C++标准库中定义在std标准命名空间下的一个模板类,它的第一个参数:class T ,是用于指定vector容器中存储元素的类型。
2025-12-30 15:34:06
794
原创 C++:string(2)
我们先来看看容量有哪些:首先来说明一下size和length,这两个函数都是返回字符串长度,但习惯常用size。但这里为什么会存在两个相同作用的函数,其实是跟C++的一些发展历史有关,大家感兴趣的可以去查一下,在这里就不过多赘述。
2025-12-15 12:22:44
1117
原创 C++:string(1)
在学习string之前,我们要先简要了解一下STL是什么。STL(Standard Template Library,标准模板库)是 C++ 标准库的核心部分,包含了一系列通用的模板类和函数,用于提供数据结构(如容器)和算法等基础功能,以实现高效的泛型编程。重点是要了解STL的六大组件:string其实就是STL的容器组件中的一员。
2025-12-12 13:36:18
374
原创 C++:模板初阶
在C++的知识讲解中,我们前面提到过函数重载的内容,大家看这段代码:我们通过函数重载,编写不同类型的Swap函数,C++中编译器会自动识别匹配的函数去调用。但是我们发现,这两个Swap函数除了类型不一样,其他的代码都一摸一样,如果有很多个类型的数据需要我去交换,那就要写很多很相似的代码,这显得有些效率低下了。于是为了解决这个问题,就衍生出了模板的概念。大家都知道模具、模板的意思,就是存在一个框架,通过给这个框架中填充不同材料,来获得不同材料的铸件。代码中的模板也是这样。
2025-12-11 20:31:24
846
原创 C++:C/C++的内存管理
尽管C语言里面的malloc/calloc/realloc/free存在着一点点的麻烦,但能解决绝大多数场景了。那C++为什么一定要弄个new和delete出来呢?其实C++这样做,主要是为了类而准备的。new/delete 和 malloc/free最大区别是new和delete对于“自定义类型”除了开空间,还会调用构造函数和析构函数并且当要开辟多个对象,并且对对象进行初始化的时候,malloc等函数就会显得有些疲惫。
2025-12-10 20:14:40
860
原创 C++:类和对象(3)
之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。这就叫初始化列表,括号内的值用于初始化括号外面的变量。这跟我们之前写的在函数体内初始化有点像:这个就是在函数体内进行初始化,既然都是初始化那么这两种写法能不能混着写呢?
2025-12-08 23:02:43
798
原创 C++:类和对象(2)
大家千万不要把默认成员函数和默认构造函数这个东西混为一谈了。默认构造函数有三种类型。默认成员函数是你自己没写的时候,编译器自动给你生成的。
2025-12-03 20:12:43
893
原创 C++:实现一个日期类
如果对于-=的代码是这样实现的,那么我们思考一下,能不能用-=的代码去复现一下-的代码。因为我们说了,-和-=,以及+和+=,都只是原日期到底有没有被改变的区别。所以对于-还有+,其实都是在-=和+=的基础上,多了一份拷贝,然后对拷贝进行操作而已。大体的代码都差不多,所以在我这样编写了-=的代码后,再按照常规方式去写,就感觉很冗余。因为-和+,都是在拷贝上进行操作,对于拷贝来说怎么操作都没事,因为出了作用域之后,拷贝的值都销毁了。因为这里的赋值操作符是-=,所以就会直接调用-=的函数。
2025-12-02 20:56:53
265
原创 C++:类和对象(1)
(1)class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。用更简单的话说,我觉得类和C语言当中的结构体很像,因为结构体当中只能定义不同变量,而类不仅能定义变量,还能定义函数。所以可以说,类是“结构体pro max”。同时, C++有一种实现封装的方式,用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限,选择性的将其接口提供给外部的用户使用。
2025-11-24 14:20:38
921
原创 C++:入门知识(3)
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同一块内存空间。比如:水浒传中李逵,宋江叫他"铁牛",江湖上人称"黑旋风";林冲,外号豹子头。这是最基本的展示。
2025-11-21 17:15:27
860
原创 C++:入门知识(2)
C++支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。直接看定义太晦涩难懂,我们用例子来给大家说明。比如当我想要在代码中交换两个数的值,但是这两个数可能是double类型的,也可能是int类型的等等,所以我创建了两个交换不同类型数据的swap函数。因为这是在C++的编译器下写出的这段代码,所以并没有出现报错。
2025-11-17 11:07:48
891
原创 数据结构:复杂度(1)
我们写代码时,很容易陷入“能跑通就行”的误区,但实际开发中,算法的效率直接决定了程序的性能上限——比如同样是处理100万条数据,有的算法1秒出结果,有的却要等10分钟,这背后的差异就是“复杂度”。算法复杂度主要分两类:1.时间复杂度:衡量算法执行所需的时间长短,核心是“随着数据量增长,时间如何变化”。主要衡量⼀个算法的运行快慢。2.空间复杂度:衡量算法执行所需的内存大小,核心是“随着数据量增长,内存如何变化”。主要衡量⼀个算法运行所需要的额外空间。
2025-10-24 22:59:04
611
原创 C语言:字符函数与字符串(2)
1. 字符串拼接:strcat vs strncatstrcat(dest, src):无长度限制,将 src 完整拼接到 dest 末尾,必须保证dest有足够空间,否则会内存越界。strncat(dest, src, n):仅拼接 src 的前 n 个字符(或 src 提前结束则拼接全部),最后自动补 '\0' ,可通过 n 控制长度,降低越界风险。2. 字符串比较:strcmp vs strncmp。
2025-10-19 11:53:29
527
原创 C语言:字符函数与字符串(1)
strlen是C语言标准库<string.h>中的一个字符串长度计算函数,用于返回指定字符串中有效字符的个数(不包括字符串末尾结束符"\0")。在使用当中我们需要注意以下这些点:1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数2.参数指向的字符串必须要以 '\0' 结束 (重点)3.注意函数的返回值为size_t,是⽆符号的 (易错)4.strlen的使⽤需要包含头⽂件现在我们尝试使用一下这个函数。
2025-10-17 23:16:37
840
原创 C++:入门知识(1)
可是,我在打印的时候,怎么才能让编译器知道我是想打印全局域里的内容,还是我创建的命名空间的内容,还是局部域的内容呢?而”namespace“这个关键字,相当于创建了一个新的地区,它独立存在,不同于“全局域”和“局部域”的概念。我们要搞清楚,printf这个函数,在查找需要打印的内容时,会优先在局部域当中找,其次在全局域中找,如果找不到则会报错,当我们想要让其打印命名空间里的内容时,需要对其进行这个操作。同理,如果我是想打印全局变量当中的rand,操作与其类似,对于全局变量,要在域作用限定符前加上“ ”。
2025-09-28 17:53:07
218
原创 冒泡排序的构思
此处我们只考虑了,如果给我的数据是无序的情况,那么如果给我的数据是一组本来就排好的数字,那我还要运行一次代码,就会浪费时间。所以我们想要创建一个变量flag=1,当我们进行排列的时候,如果我一次数字的位置交换都没有进行,就相当于我的数据一开始就是有序的,如果我进行了至少一次位置交换,那我的flag就置为0。例如:我先拿0和1比较,比较出来1更大,那么0这个数字就排好了。这样的话,我这一串数字共10个,我只需要排9次,因为这是升序排列,当我排到第9个数字的时候,第10个数字的位置就确定了。
2025-08-13 23:41:18
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅