- 博客(18)
- 收藏
- 关注
原创 数据结构--顺序表
其中,如果头插入了4个数据,但头删除调用的次数不止4次,因为可能在destroy中的free函数中报错,原因是,free函数只允许从头到尾地释放开辟的空间,如果指针所指的地址不是开辟空间的最开始就会报错。异地扩容指的是要扩容的空间里有被使用的情况,这种情况下就会把原空间的内容拷贝到一个没有被使用的新空间里,然后返回新空间的地址。一般来讲,越界读一般不会检查出来,但越界写可能会被检查出来。原地扩容是指要扩容的空间中没有被使用,就在原空间之后扩容,返回原空间的地址。因为形参是实参的拷贝,所以用指针传参。
2023-09-11 22:43:56
30
原创 C++类和对象
(不要弄混淆,函数的地址也就是指令地址,存在代码段中,而参数是指令运行产生的数据,存在于栈中)一般情况下,一个类中成员变量是私有,成员函数想给别人用的部分为公有。在c++中,有些情况下NULL在识别上会出现一些问题,例如某些情况下会被识别成整型(也就是0),所以 为保证代码的健壮性,之后都用。通过用sizeof查看类对象的大小我们发现,成员变量在对象中,而成员函数不在。但既然函数是公用的,传参不同的时候,又如何区分不同的对象所对应的不同的值呢?此代码的含义是:b的类型没有直接给出,而是通过推导得出的.
2023-08-28 20:09:56
40
1
原创 C++:引用
调用完函数并不能直接将n的值直接赋给ret,因为在调用完函数后栈帧销毁还给系统,在函数栈帧内的n变量所在的空间同时会形成非法访问,所以需要一个临时变量来作一个桥梁,若变量的内存比较小(4-8个字节)一般寄存器充当临时变量,如果比较大则寄存器无法充当。C语言不允许函数同名,但C++允许同名函数,但函数虽然可以同名但要求形参不同(个数,顺序或类型不同),且两函数在同一命名空间。在此代码中n不在函数栈帧中,而是在静态区中,即出了栈帧此空间还在。这样的话返回的是n的别名,就不需要临时变量作为桥梁了。
2023-08-21 17:05:30
40
1
原创 C++入门
不加这一句,若使用变量或函数时不指定命名空间是会报错的,即编译器不会到std中去找变量,加上之后编译器就不仅会到全局找,还会到std中找。(例子中的std是C++标准库的命名空间)但一般情况下不建议全局展开,相当于自己破环了自己所设的防线。(平时的练习可以考虑展开)缺省参数还可以分为全缺省和半缺省。使用时除了指定命名空间,还可以将命名空间全局展开。部分展开在开发的过程中同样常用。即当Func函数中没有实参时,可以将形参赋值。即在栈已知或未知扩容空间时,使用缺省参数解决。即像这样使用,::左边是其指向的域。
2023-08-11 10:16:05
38
1
原创 复杂度和顺序表
时间复杂度同样可以判断一个算法是否有价值,当上述数列的N=50时,计算机无法承担过多的计算量,所以从实际角度讲,这个算法没有实际意义。按需申请 类似之前的通讯录(增删查改),插入数据对数据的处理,放在顺序表中,是和通讯录的逻辑耦合在一起的。但开辟空间不确定(开多了浪费,开少了不够,类似数组中define的N决定数组的大小)递归的算法是先创建栈帧后销毁,所以递归的空间复杂度与时间复杂度不同,是O(N)。空间复杂度为O(N),因为时间一去不复返,但空间可以重复利用。不同的计算用相同的空间,即上图所示。
2023-08-05 22:32:19
36
1
原创 算法的复杂度的认知
时间效率我们通常称之为时间复杂度的计算。而算法执行基本操作的次数叫做时间复杂度。在计算机科学中,算法的时间复杂度是一个函数(这里的函数不是程序中的函数,而是数学中的函数式,即也是计算执行次数)。若F(N)=N*N+2*N+3,那么用大O的渐进表示法则表示成:O(N^2)如果计算其大概的次数,只需要计算量级即可(大O的渐进表示法表示量级)上图体现出二分查找强大的计算效率,但只是在有序的情况之下。即一系列的计算步骤,将输入数据转化为输出结果。即在内存当中,对数据进行管理。算法效率:时间效率与空间效率。
2023-04-14 21:57:28
44
原创 预处理的学习
头文件的包含:用<>直接从库中寻找头文件,没有找到则显示编译错误;用“”一般先从工程中寻找头文件,如果没有找到,就在库里寻找。(用“”寻找库里的头文件效率比较低)因为宏是直接将变量全部替换,所以其影响会贯穿整个宏;而函数传参只是在传参的一步计算,在函数内没有影响。命名约定:宏的名字全部大写,函数的名字不要全部大写。可以得到b=11,但a也会随之变化。这些是函数做不到的。
2023-04-13 13:29:01
39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人