- 博客(21)
- 收藏
- 关注
原创 C++基础(5.模板+string)
malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是: 模板的定义格式例子(实现一个任意栈的push): 原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP版本 -- 所有STL实现版本的始祖。P.J.版本由P.J.Plauger开发,继承自HP版本,被Window
2024-08-12 15:06:27
416
原创 C++基础(4.内存管理)
对于p2和p3开辟的空间如同,开辟空间后对p3来说返回的位置如图(因为p2没有写析构函数同时也没有动态申请的空间需要析构于是编译器就优化掉了,对于p2的delete也就没有问题)。当时对于p3来说在头部有额外开辟的空间 ,加了方括号才会向前偏移到正确的位置释放,而不加方括号就会在如图位置析构一次,而开辟的空间是不能部分析构的所以会报错。对于new申请的空间如果失败了那么就会抛异常跳过后面的代码。对于写了析构函数的类系统在开空间时候会在头上多开4个字节来记录个数来调用析构函数。
2024-07-25 18:34:51
372
原创 C++基础(3.内和对象)
赋值运算符重载:const限制权限:隐式类型转换:再探构造函数:static成员:有元:内部类:赋值运算符重载的特点:重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,无法很好的区分。 C++规定,后置++重载时,增加一个int形参,跟前置++构成函数重载,方便区分。重载 >时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第一个形参位置,第一个形参位置是左侧运算对象,调用时就变成了对象
2024-07-19 20:54:55
818
原创 C++基础(2.类和对象)
class为定义类的关键字,Stack为类的名字,0}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_或者m开头,注意C++中这个并不是强制的,只是一些惯例,具体看公司的要求。
2024-07-14 23:20:45
921
原创 C++基础(1)
在传地函数中,由于形参是实参的拷,拷贝需要消耗空间和效率,于是我们可以直接通过在函数内为实参引用但是由于我们不想改变实参数或者类型不一样等原因我们就加上const。一个对象可以有多个别名,别名也可以有别名。在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调。1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会。
2024-07-09 16:10:19
584
原创 排序算法及源代码
直接插入排序是认为要插入数之前的所有数据已经排序好,用一个tmp临时变量存储要插入的值,如果要插入值的前一个数据比他大,那么就向后覆盖,接着继续往前比,直到遇到比要插入值小的数据,将要插入值插入在该数据的后一位。因为对于大(小)堆来说它的左右子树也都应该是大(小)堆,以此类推我们最小的数也应该是大(小)堆,于是我们就从最小的树开始建堆。其思想就是利用一个数组,数组名表示需要排序的数组里的数据,其大小就是出现次数,最后从大到小存在一个数组里。算法复杂度:O(N*logN)算法复杂度:O(N)
2024-06-19 19:22:45
604
1
原创 带环链表的相关问题
本篇文章将解释如何去判断链链是否带环即原理以及寻找入环点。如上图所示,在一个单链表的基础上,在链表的后一部分形成了一个循环链表,也就是说一个单链表的尾节点的next没有指向NULL而是指向了一个循环链表。
2024-04-29 19:30:51
257
原创 单链表 结合画图分析 附源代码
在C语言中,链表是一种非常重要且常用的数据结构,它可以动态地存储和管理数据。链表由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。相比于数组,链表的大小可以动态地增长或缩小,这使得链表在很多场景下更加灵活和有效。
2024-04-11 22:52:17
739
1
原创 顺序表讲解 及 源代码
/方便后续类型的替换int size;//有效的数据个数//空间大小}SL;//也可以用typedef struct SeqList SL;
2024-04-03 20:56:06
1717
1
原创 c语言的编译和链接
C语言代码经过编译以后,会变成了二进制形式的目标文件(Object File)--- 对于 Visual C++,目标文件的后缀是。,这些组件都是程序运行所必须的。例如我们要在屏幕中输出字符,这必须调用系统提供的库才能够实现。是指用源语言写的,有待翻译的程序,如我们自己写的一段c++代码,源程序通过翻译程序加工以后生成的机器语言程序。但此时的代码还不能运行起来。不管我们编写的代码有多么简单,都必须经过。首先我们需要知道的两个概念,对应的各个阶段处理的文件的。这是计算机可以理解的语言。
2024-03-28 19:12:08
493
原创 C语言文件操作
C语言是不仅可以处理内存中的数据,还可以与外部文件进行交互。以下是C语言中的文件操作,包括文件的创建、打开、读取和写入等基本操作。
2024-03-27 11:46:03
2388
原创 结构体相关知识
结构体是C语言中一种非常实用的数据类型,它可以将不同的数据类型组合在一起,形成一个有机的整体。本文介绍了结构体的相关知识,包括结构体类型、结构体变量的创建和初始化,以及结构体中的内存对齐等内容,并给出了相关示例,帮助更好地理解和掌握结构体在C语言编程中的应用。
2024-03-20 10:48:00
663
1
原创 整型数据和浮点型数据在内存中存放的方式
C语言中的浮点型数据,如`float`和`double`,在内存中的存放方式和整型数据有所不同。在大端序系统中,高位字节存储在内存的低位地址上,而低位字节存储在内存的高位地址上;指数位 (8位): 127 (对于float类型指数 占8位, 表示 0-255之间的数值,指数有一个偏移量127来辅助方便判断指数的正负,所以实际存储的是127 + 1 = 128,二进制为10000000)在内存中,浮点数的存储是二进制形式的,按照IEEE 754标准的格式进行排列。这里,`1.01`是尾数,`1`是指数。
2024-03-18 13:30:32
1914
原创 菜鸟理解和使用realloc函数
我们以字符串数组举例,正常情况下我们定义一个字符串数组比如 char str[5] 是属于静态储存,字符串的长度是我们自己设定的,这就会出现两个问题:当我们把长度设置的太短,那就会出现不够用,如果设置太长就会用不完剩余太多. 那我们通过reallock就可以实现动态储存,扩大字符串分配的内存。在原字符串内存后面的空间被使用过,没有足够的空闲空间给str1扩大。那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块地址位置,str地址会改变。
2024-03-15 15:38:54
389
1
原创 C语言模拟实现strlen,strcmp,strcat,strcpy,strstr函数
strcmp(str1,str2)函数在比较两个字符串时不是比较长度,而是比较从左到右比较每个字母的ASCii码值,如果先出现了str1比str2的ASCii码大的字符着返回一个大于0的数字,反之返回小于0的数字。将str1和str2传给strcat函数时,函数会先找到str1结尾‘\0’的位置,再把str2的内容从头到尾抄到str1上。strstr(str1,str2)函数用于查找str2在str1出现的位子,返回值为str1首次出现str2的地址。下面是递归的方式,思路和上面的一样。
2024-03-13 13:49:46
370
1
原创 C语言指针的基本用法和理解
在我们的计算机中,大量的数据储存在内存当中,在如此多的数据里如何进行高效的管理呢?总结起来,C语言中的指针是一个非常强大的工具,它允许我们直接操作内存地址,实现高效的内存管理和数据操作。指针的类型决定了指针所能指向的数据类型,以及指针进行算术运算时的步长(即每次移动的内存地址大小)。相同的,我们也可以在开辟的同一块内存空间中用指针减指针等操作,其代表的含义就是这两个指针之间数据元素的个数。C语言中的指针是一个非常重要的概念,它允许我们直接操作内存地址,从而实现更高效的内存管理和数据操作。
2024-03-07 16:33:18
342
1
原创 c语言扫雷游戏代码的实现
如果没有则在mine棋盘内对玩家输入的坐标进行判断是否为内,如果是雷则游戏结束,如果不是我们将这个坐标周围的位置类的数量进行判断,通过一个get_mine_count来统计数量。在玩家选择一个格子查询时如果没有雷自动向周围的八个格子查询雷的数量,因此会出现一个问题,在对最上,下,左,右一行查询时会越界,因此我们对存放雷的棋盘应在周围多处出来一行。以9*9的棋盘为例,你需要一个11*11的棋盘。设置的计数器win当成功选中一个不是雷的位置后就加1,但加到9*9-10(没有雷的位置的个数)后,游戏胜利。
2024-02-02 16:45:42
337
原创 C语言中的分支循环语句
为了优化嵌套循环的性能,可以使用一些技巧,例如将内层循环变为一个函数,或者使用break和continue来跳过不必要的循环。for循环首先执行initialization,然后检查condition是否为真,如果为真则执行内部的代码块,然后执行update,再重复这个过程。C语言中的分支循环语句是编程中非常重要的部分,它们决定了代码的执行流程。switch语句会根据expression的值与各个case后面的value进行比较,如果匹配则执行相应的代码块,然后通过break跳出switch语句。
2024-01-29 16:14:39
358
原创 梦开始的地方
大家好,我叫小刘,这是我第一次使用并写博客。目前是一个二本大一学生,专业是通信工程选择了网络与交换方向。自从在学校大一开始接触c语言的课就让我体会到了它的魅力。希望以后在csdn上学习到更多有用的知识。
2024-01-21 19:59:01
336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人