- 博客(27)
- 收藏
- 关注
原创 C++模板初阶
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;
2025-05-25 19:03:04
927
1
原创 C/C++内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2025-05-24 22:10:44
1234
原创 C++类和对象3构造函数再探+细节补充
在类和对象2中我们介绍了几个默认成员函数,这次我会带大家再探🔎构造函数(初始化列表),并且补充一些细碎知识点。如果一个类定义在另一个类的内部,这个内部类称为内部类(Nested Class)。内部类本质上是一个独立的类,与全局类相比,它只是受到外部类的作用域限制和访问限定符的约束。因此,外部类的对象中并不包含内部类的对象。
2025-05-20 22:28:05
656
原创 C++内联函数,nullptr
inline对编译器来说只是一个建议,也就是说,就算你加了inline编译器也可以在调用的时候不展开,不同的编译器对于inline是否展开情况各不相同,因为C++标准没有这个标准。用inline修饰的函数 叫做内联函数,编译时C++编译器会在调用时展开内联函数,这样调用内联函数就不需要建立栈帧了,可以提高效率。vs编译器的debg版本下是默认不展开inline的,这样方便调试如果想展开按以下图片步骤调整。C语言实现宏函数时也会在预处理时替换展开,但是宏函数实现很复杂很容易出错,且不方便调试。
2025-05-06 11:14:45
338
原创 数据结构——队列(c语言)
先向内存申请一个新的指向结点的指针newnode再将想入队数据导入newnode中的data中;概念:只允许在一端进行插入数据操作,在另外一段进行删除数据操作的特殊线性表(先进先出)。,因为如果使用数组结构,出队列每出一个数据要把数组数据前移一位,效率比较低。还有队尾ptail;这一步很重要,将头尾指针都赋值尾newnode。此时队列由phead和ptail两点连成一线。:队列和栈一样也可以使用数组和链表来实现,//这一步相当于把两个结点连成一条。:进行插入操作的一段为队尾。:进行删除操作的一段为对头。
2025-04-03 23:33:54
419
原创 数据结构——栈(c语言)
栈:一种特殊的线性表,只允许固定的一端进行插入和删除元素的操作。出栈相较于入栈简单得多,只要用assert断言ps如果不为空就将标记栈顶的top减1,这样栈里储存的数据相应减1。栈由一个用于存储数据的数组(arr)和栈顶位置对应数组的下标(top)以及栈的容量大小(capacity)组成。其结构就像在木桶里放入砖块先放进去的砖块在最底下,在后面取砖块的过程会被最后拿出来。:此操作的是为了节约空间如果固定增容很大的空间会造成很大的空间浪费。:栈的插入操作叫进栈/压栈/入栈(入的数据在栈顶)。
2025-04-03 17:44:05
460
原创 C语言指针(3)
但是&arr 和 &arr+1相差40个字节,这就是因为&arr是数组的地址,+1 操作是跳过整个数组的。这里我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数。不是说整个数组的地址和数组首元素的地址是有区别的吗?数组我们学过了,之前也讲了,数组是可以传递给函数的,这个小节我们讨论⼀下数组传参的本质。
2025-03-20 14:28:54
774
原创 顺序表(数据结构)
线性表(linear list)是n个具有相同特性的元素的有限序列。思路与头插和头删相似,都是先把指定位置的数据统一向前或向后移动一一位,只不过多了指定位置这一参数。因为我们使用了realloc进行空间的重新申请,所以完成各种操作以后记得将空间释放。插入数据之前我们要思考顺序表里的空间是否足够;头删只需要把从第二个数据开始的每个数据向前移动一位再将有效数据数目减少一个。)的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。之后在插入数据的时候只要包含这个函数即可;由此我们想到在顺序表中插入数据;
2025-03-18 19:03:10
1045
原创 C语言指针(2)
swap1函数在使⽤的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫。对于指针也是,在使用之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是不能直接使用,如果不是我们再去使用。我们可以把野指针想象成野狗,野狗放任不管是非常危险的,所以我们可以找⼀棵树把野狗拴起来,就相对安全了,给指针变量及时赋值为NULL,其实就类似把野狗栓起来,就是把野指针暂时管理起来。就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)那么我们该怎么办呢?
2025-03-16 00:05:00
1132
原创 C语言指针(1)
如果指针变量是⽤来存放地址的,那么指针变量的大小就得是4个字节的空间才可以。同理64位机器,假设有64根地址线,⼀个地址就是64个⼆进制位组成的⼆进制序列,存储起来就需要8个字节的空间,指针变量的大小就是8个字节。32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产生的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。注意:p左边的int*,其中*表示p是指针变量,而int表示p指向的是整形(int)类型的对象。
2025-03-14 14:56:29
1123
原创 C语言习题(函数)1
看起来第一种二分查找复杂复杂一些但是会使编译器运算更加简便。如果只要查找数据不用二分查找也可用如下代码。二分查找主要是为了减少计算量。
2025-01-19 20:44:28
382
原创 c语言——循环结构体设计
在这个例子中,我们有一个 for 循环,它从 0 迭代到 9。循环内部有一个 if 语句检查当前的迭代变量 i 是否为偶数(即 i % 2 == 0)。如果是偶数,continue 语句会被执行,这会导致跳过 if 语句以下的代码,直接开始下一次循环迭代。因此,只有当 i 是奇数时,printf 函数才会被调用,打印出当前的 i 值。表达式1:设置一个初始条件(可设置多个初始条件,初始条件间用。表达式2:设置循环条件类似while(表达式2)表达式3:作为循环的调整,改变循环变量 且为。
2024-12-02 17:08:04
809
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅