自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 C++中的继承

总结:1. 基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。2. 基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。3. 实际上面的表格我们进行一下总结会发现,基类的其他成员在子类的访问方式是取权限最小的那个;

2024-09-06 12:45:38 426

原创 C++对C语言的几个简单优化

一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中,就不会和其他作用域的内容冲突。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对。注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应。注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用。

2024-06-03 00:03:46 639

原创 类的两个默认成员函数

总之,一般情况下都要自己写构造函数来决定初始化的方式,成员变量全是自定义类型的,可以考虑不写构造函数。注意::如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明;与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由。若未显式定义,系统会自动生成默认的析构函数。:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。C++编译器自动生成的(无参的)默认构造函数,作用是什么?构造函数是特殊的成员函数,

2024-06-02 23:15:44 390

原创 选择排序/堆排序

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定。

2024-05-19 21:58:58 158 1

原创 排序和插入排序

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,则这种排序算法就是稳定的,否则就不稳定。内排:数据元素全部放在内存中的排序。外排:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。 特性: 通过上面的代码可以看出,直接插入排序就是希尔排序里当gap=1的时候;所以希尔排序是在直接排序前,先对数据

2024-05-19 21:49:13 200 1

原创 树和二叉树

4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= log(n+1). (是log以2为底,n+1为对数);另外,在完全二叉树中,如果节点总个数为奇数,则没有度为1的节点,如果节点总个数为偶数,只有一个度为1的节点。1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2 ^(i-1)个结点.2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h-1。:若一个节点含有子节点,则这个节点称为其子节点的父节点;:一个节点含有的子树的根节点称为该节点的子节点;

2024-05-05 19:00:30 790 1

原创 栈和队列-

一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。栈的删除操作叫做出栈。出数据也在栈顶。注意:关于后进先出。

2024-04-09 21:45:02 305

原创 顺序表和链表

是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2024-03-31 14:20:17 303 1

原创 动态内存函数

> 动态内存函数开辟的空间,只有当程序退出时才会还给操作系统,当程序不退出时,不会主动释放,所以动态内存函数要和free搭配进行使用;>> 原有空间之后没有足够多的空间时,扩展的方法是在堆空间上另找一个合适大小的连续空间来使用。>> 返回值的类型是void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。>> 当是情况1 的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变 化。>> 如果开辟成功,则返回一个指向开辟好空间的指针。

2024-02-28 08:28:07 429

原创 C语言文件读取结束的判定

判断返回值是否为EOF ( fgetc ),或者NULL ( fgets )牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束。而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束。的指针变量指向该文件,也相当于建立了指针和文件的关系。遇到文件尾结束,就返回一个非0的值,否则就返回0;在编写程序的时候,在打开文件的同时,都会返回一个。是在当文件读取结束的时候用来进行进一步判断。,判断返回值是否小于实际要读的个数。通过上面的例子,可以发现在。

2024-02-24 11:33:19 511

原创 #define 定义宏

置于程序中,预处理器就会用下面的表达式替换上面的表达式:printf("%d\n", 5*5);#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。(需要注意的是:调用宏的时候,不会对传参表达式做任何的处理,是直接进行替换,所以才会出现上面两段代码里面的运算优先级的问题)。1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。这里面的字符串常量“M=%d”中的M不会被替换,只有后面的值M会被替换;

2024-02-20 10:15:44 464

原创 自定义类型 - 结构体

C1的对齐数为1,放在偏移量为0的地址处,C2的大小为4,VS的默认对齐数为8,所以对齐数为4,所以根据上面的规则2放在地址为偏移量为4的位置,同理C3的对齐数为1,放在偏移量为8的位置,此时,,然后根据规则3,结构体成员的最大对齐数为4,所以结构体大小为最大对齐数的整数倍,所以最后的结构体大小4的整数倍为。(4)如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。而对齐的内存访问仅需要一次访。最后的结构体大小为8,刚好为结构体最大对齐数的整数倍,所以结构体的整体大小也为8;

2024-02-17 10:31:08 1087 1

原创 字符串函数memcpy/memmove/memcmp

如果源空间和目标空间出现重叠,就得使用memmove函数来处理;当然memmove也可处理不重叠的内存拷贝,所以memmove可以很好的代替memcpy;2. memmove (功能与memcpy相同,但是可以处理重叠的内存拷贝)从ptr1和ptr2指针开始的num个字节,对应的字节一一进行比较;函数memcpy从source的位置开始向后复制num个。注意:memcpy是用来处理不重叠内存的拷贝;的数据到destination的内存位置。拷贝结束后会返回目的地空间的起始地址;

2024-02-12 14:38:59 875 1

原创 字符串函数strstr/strtok/strerror

strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针。找到一个标记的时候,strtok函数将保存它在字符串中的位置,然后开始下一个标记的查找;注意:strtok函数会改变被操作的字符串,所以在使用strtok的时候要临时拷贝一份源字符串,并用拷贝的字符串进行操作;errno是C语言提供的一个全局变量,后面一旦产生新的错误就会覆盖之前的错误码,所以要即使检查;> str 是一个指定的字符串,包含0个或多个第二个参数里面的分隔符标记;

2024-02-12 14:03:50 869 1

原创 字符串函数strncpy/strncat/strncmp

only the content up to the terminating null-character is copied.(如果num超过了source的字符个数,则不会补0,只会追加source里面存在的字符);is an unsigned integral type.(拷贝num个字符从源字符(source)到目标空间(destination),如果源字符串的长度小于num,就在拷贝完成以后,追加0,直到num个);- 字符串拷贝,可以和strcpy进行比较学习;.(最多比较num个字符)

2024-02-12 11:05:54 875 1

原创 字符函数strlen/strcpy/strcat/strcmp

注意:字符串自身不能给自身追加,就是比如 my_strcat(arr1, arr1),这样'\0'会被覆盖,就会找不到停下来的标志;总结:源字符串arr2必须包含'\0';并且'\0'会一起拷贝到arr1中;//这里的返回值类型设置为char*是可以将返回值作为参数实现链式访问;- 求字符串的长度,以'\0'作为结束的标志,返回的是‘\0’前面出现的字符个数,返回值为。总结:源字符串必须以‘\0’结束,并且目标空间必须足够大,可修改;总结:以上的字符串长度不受限制,只关注\0;size_t, 是无符号的;

2024-02-12 10:22:31 1072 1

原创 数据在内存中的存储:

知识点总结

2024-01-28 13:11:56 879 1

原创 我和“编程”

编程学习的感想

2023-12-30 10:45:24 364

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除