自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++(八)vector

1. vector是表示可变大小数组的序列容器2. 就像数组一样,vector也采用的连续存储空间来存储元素也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理3. 本质讲,vector使用动态分配数组来存储它的元素当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2025-03-15 13:58:34 1333

原创 C++(七)string类

3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当。find + npos(重点) 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置。字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出。

2025-03-12 12:51:00 1055

原创 C++(六)模板初阶

class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)

2025-03-10 13:39:28 554

原创 C++(五)C/C++内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2025-03-08 00:21:18 696

原创 数据结构(四)栈和队列

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。

2025-03-05 20:05:23 956

原创 数据结构(三)链表

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的。结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结 构,如哈希桶、图。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单。结构最复杂,一般用在单独存储数据,实际中使用的链表数据结构,都是带头双向循环链表。可能需要搬移元素,效率低O(N)逻辑上连续,但物理上不一定连续。任意位置插入和删除频繁。2. 带头或者不带头。3. 循环或者非循环。

2025-03-03 20:20:35 683

原创 C++(四)类与对象 下

但又会导致类外没办法访问成员,此时就需要友元来解决。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类。注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。

2025-03-02 13:31:40 917

原创 C++(三)类与对象 中

默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。下面的程序我们会看到,编译器 生成的默认析构函数,对自定类型成员调用它的析构函数。拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 在的类类型对象创建新对象时由编译器自动调用。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 要重载,比如想让别人获取到指定的内容。6. 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如。

2025-03-01 14:23:02 1099

原创 C++(二)类与对象 上

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{}中为类的主体注意:类定义结束时后面分号不能省略类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数1. 声明和定义全部放在类体中注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理2. 类声明放在.h文件中,成员函数定义放在.cpp文件中注意:成员函数名前需要加类名::一般情况下,更期望采用第二种方式。

2025-02-18 18:08:34 872

原创 C++(一)入门

/ 命名空间中可以定义变量/函数/类型命名空间可以嵌套同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

2025-02-14 23:19:37 577

原创 数据结构(二)顺序表应用:通讯录

/定义联系人数据// 姓名 性别 年龄 电话 地址int age;}peoInfo;

2024-10-13 22:01:33 370 1

原创 数据结构(一)顺序表

顺序表是线性表的一种,顺序表的底层是数组。线性表是具有相同特征的数据结构的集合。头部插入删除 / 尾部插入删除。指定位置之前插入 / 删除。物理结构 不一定连续。顺序表的初始化和销毁。

2024-10-12 20:37:29 573

原创 C语言进阶(五)文件操作

磁盘(硬盘)上的文件是文件但是在程序设计中,我们谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)

2024-09-22 18:20:33 781

原创 C语言进阶(四)动态内存管理

C/C++程序内存分配的几个区域:1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等2. 堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表er3. 数据段(静态区)(static):存放全局变量、静态数据,程序结束后由系统释放。

2024-09-01 00:43:48 853

原创 C语言进阶(三)自定义类型:联合和枚举

对于礼品兑换单中的商品来说,只有部分属性信息是常用的,我们可以把公共属性单独写出来,剩余属于各种商品本身的属性使永联合体起来,这样就可以减少所需的内存空间,一定程度上节省了内存。联合体类型的声明像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。在C语言中是可以的,但是在C++是不行的,C++的类型检查比较严格。

2024-08-29 13:17:43 212

原创 C语言进阶(二)自定义类型:结构体

位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是int、unsigned int 或signed int ,在C99中位段成员的类型可以选择其他类型2. 位段的成员名后边有一个冒号和一个数字struct Aint _a:2;int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的大小是多少?

2024-08-27 23:33:14 745

原创 C语言进阶(一)数据在内存中的存储

数据在内存中存储的时候,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储大端(存储)模式: 是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。小端(存储)模式: 是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。

2024-08-26 22:44:45 738

原创 C语言初阶(五)C语言内存函数

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。比较从ptr1和ptr2指针指向的位置开始,向后的num个字节。如果源空间和目标空间出现重叠,就得使用memmove函数处理。对于重叠的内存,交给memmove来处理。

2024-08-25 19:24:46 292

原创 C语言初阶(四)字符函数和字符串函数

如果source 指向的字符串的长度小于num的时候,只会将字符串中到 \0 的内容追加到destination。strtok函数会改变被操作的字符串,被strtok函数切分的字符串一般是临时拷贝的内容并且可修改。当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。//将参数传进去的大写字母转小写。

2024-08-25 19:20:57 1030

原创 C语言初阶(三)深入了解指针(5)

统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数。1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界。srtlen是求字符串长度的,统计的是 \0 之前字符的个数。sizeof 计算变量所占内存内存空间大小的,单位是字节。数组名是数组首元素的地址。

2024-07-05 22:50:30 389

原创 C语言初阶(三)深入了解指针(4)

qsort是C语言中的一个库函数这个函数是用来对函数进行排序的,对任意类型的数据都能排序。把函数的指针作为参数传递给另一个函数,用来调用被传函数,这个被传函数就是回调函数。因为p1,p2的类型都是void,所以if语句的条件中要强制类型转化成特定的类型。回调函数不是被直接调用,而是在特定的事件或条件发生时由另外的一方调用的。qsort函数所需要的比较元素大小的函数要放在qsort上面。p10);回调函数就是⼀个通过函数指针调用的函数。

2024-07-02 19:47:54 345

原创 C语言初阶(三)深入了解指针(3)

根据上面的例子,第一行的类型就是int [5] ,所以第一行的地址的类型就是数组指针类型int(*)[5]存放的是整型变量的地址,能够指向整形数据的指针变量。根据数组名是数组首元素的地址这个规则,二维数组的数组名表示的就是第一行一维数组的地址。把函数的地址存到⼀个数组中,这个数组就叫函数指针数组,那函数指针的数组如何定义呢?要将函数的地址存放起来,就得创建函数指针变量,函数指针变量的写法和数组指针非常类似。函数是有地址的,函数名就是函数的地址,当然也可以通过&函数名的方式获得函数的地址。

2024-06-27 15:59:12 1151 1

原创 C语言初阶(三)深入了解指针(2)

arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,因为&arr[0]和arr都是首元素的地址,同理arr[i] 应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成首元素的地址+偏。sizeof(数组名)中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小, 单位是。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素。数组名是数组首元素的地址,在数组传参的时候,传递的是数组名,本质上数组传参传递的是数组。

2024-06-26 22:40:49 750

原创 C语言初阶(三)深入了解指针(1)

计算机内是有很多的硬件单元,硬件与硬件之间是互相独立的,而硬件单元是要互相协同工作的,至少相互之间要能够进行数据传递,那么如何通信呢?答案很简单,用"线"连起来。样,y的地址和b的地址不⼀样,相当于x和y是独立的空间,那么在Swap1函数内部交换x和y的值,直接将a和b的值交换了,那么就可以使用指针了,在main函数中将a和b的地址传递给Swap函数,数内部创建了形参x和y接收a和b的值,x和y确实接收到了a和b的值,不过x的地址和a的地址不一。

2024-06-25 23:58:37 1107

原创 C语言初阶(二)操作符详解

结构是⼀些值的集合,这些值称为成员变量。赋值操作符: = 、+= 、-= 、 *= 、 /= 、 %= 、<<=、>>=、&=、|=、^=8进制的数字每⼀位是0~7的数字,各自写成2进制,最多有3个2进制位就足够了,在2进制转8进制。数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀ 个8进制位,剩余不够3个2进。2进制序列中,最告位的1位是被当做符号位,用0表示“正”,用1表示“负”,剩余的都是数值位。如果某个操作符的各个操作数属于不同的类型,其中一个操作数的转换为另一个操作数的类型。

2024-06-20 13:11:51 973

原创 函数栈帧的创建和销毁

在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,具体细节取决于编译器的实现越高级的编译器,函数封装越复杂,越不容易观察和学习。

2024-06-19 09:39:21 568

原创 C语言初阶(一)

如果采用函数递归的方式完成代码,递归层次太深,就会浪费太多的栈帧空间,也可能引起栈溢出的问题,为了避免这种问题,可以采用迭代的发布方式。跳上n个台阶的跳法可以看成是跳上n-1个台阶的跳法加上跳上n-2个台阶的跳法之和。递归是一种解决问题的方法,在c语言中,递归就是函数自己调用自己。但这种写法有大量的重复计算,效率很低,因此要尝试使用迭代的方法。递归的思考方式就是把大事化小,递是递推,归是回归。青蛙每次能跳1或2个台阶,跳上n个台阶有几种跳法。同样看成是n个盘子,上面有n-1个盘子,以此类推。

2024-06-17 13:44:23 575

原创 初识C语言(扫雷游戏)

不是雷, 利用‘1’-‘0’=1 ,把字符转换成整型创建函数,统计这个坐标周围雷的个数,显示。为了让这两个数组可以共用一个函数,所以元素都用char类型。边界不好处理所以初始化的棋盘比用到的棋盘要大一圈。一组用来存放雷,用‘0’表示没雷,用‘1’表示雷。用while循环和rand()函数随机生成雷。创建两个数组,再创建一个函数。创建一个函数,打印游戏界面。里面嵌套switch语句判断输入选项。do-while语句打印菜单。

2024-04-24 13:58:05 453 1

原创 初识C语言(五)

格式ret_type fun_name(形式参数)ret_type 是函数返回类型fun_name 是函数名括号中放的是形式参数{ }括起来的是函数体先声明,后调用,函数的定义也是一种特殊的声明。

2024-04-22 12:21:36 1089 1

原创 初识C语言(四)

完全初始化 int arr2[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};按照行初始化 int arr3[3][5] = {{1,2},{3,4},{5,6}};sizeof可以计算数组的大小(单位是字节)进而计算元素个数(数组的大小除以每个元素的大小)完全初始化 int arr[5] = {1,2,3,4,5};[ ]中的常量值指定数组的大小,也可以不填,以{ }中的元素个数为准。

2024-04-16 16:21:38 278

原创 初识C语言(三)

while和for循环都有初始化、判断、调整三部分,但for循环的三个部分非常集中,便于代码的维护。==是关系操作符,=是赋值操作符,为了防止搞出错可以把常量放在等号左侧。例如 2

2024-04-09 17:42:18 628

原创 初识C语言(二)

数据类型分为: 字符型 chara 1Byte 整型 { 1.短整型 shourt [int] 2Byte

2024-04-02 13:28:56 1167

原创 初识C语言(一)

大家好,我是一名网络工程专业的大一在读生,准备通过博客来记录自己学习的成长和收获,希望通过不断地学习和进步能够在计算机领域内小有所成。

2024-04-01 14:11:03 670 1

空空如也

空空如也

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

TA关注的人

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