自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++入门STL容器Vector使用基础,深挖 Vector替代 C 语言繁琐容器的利器

class AApublic::_a1(a1), _a2(a2)//自定义类型的增删查改AA aa1;while (it1!//也可以是:cout << (*it)._a1 << "-" << (*it)._a2 << " ";//注意.的优先级比*高,需要括号it1++;while (it2!it2++;

2026-04-25 14:59:25 462 5

原创 C++入门STL容器string底层剖析

public:// 迭代器本质:对于连续空间,指针就是最好的迭代器private:char* _str;// 指向堆区的指针,存放字符串内容// 有效字符个数(不含 \0)// 最大容量(不含 \0)// 静态常量,表示不存在的位置(通常是 -1)指针即迭代器:初学者常觉得迭代器很神秘,但其实string底层是连续数组,我们要移动位置只需指针++。所以begin()返回首地址,end()返回末尾\0的地址,这样就足以支撑起所有的算法操作。npos 的奥秘size_t是无符号数。给它赋值。

2026-04-16 18:26:34 413 5

原创 C++入门STL容器string使用基础

string是 C++ 标准库提供的,用于管理和操作字符序列的封装类,它存在的唯一目的,就是为了让程序员(不用担心匹配),并且。

2026-04-16 18:26:02 491 3

原创 C++入门—初阶模板

class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;

2026-04-05 19:52:52 5519 6

原创 C++入门—内存管理

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

2026-04-05 19:52:31 6866 6

原创 C++入门基础—类和对象3

代码复用就是“

2026-03-29 19:49:15 5930 7

原创 C++入门基础—类和对象(2)

编译器生成的构造函数会去。

2026-03-22 19:24:30 6251 9

原创 C++入门基础—类和对象(1)

对象是类的具体实例。当你根据“蓝图”(类)真正制造出一个“建筑”时,这个建筑就是一个对象,对象是存在于内存中的,你可以操作它class为定义类的关键字,name为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省 略,类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或 者成员函数• 为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_ 或者 m 开头,注意C++中这个并不是强制的,只是一些惯例,具体看公司的要求。

2026-03-22 19:24:03 6139 8

原创 C++基础入门(缺省参数,函数重载,引用)

(又称)是指在函数声明或定义时为形参指定一个默认值,当调用函数时,如果调用者没有提供该参数的实际值,编译器会自动使用预先设定的默认值。

2026-03-22 19:23:31 5322 9

原创 C++入门基础

了。

2026-03-15 22:36:48 804 11

原创 数据结构算法—计数排序

计数排序是一种,核心思想是:先统计待排序数组中每个元素(或元素对应范围)出现的次数,再根据统计结果,将元素按顺序重新放置,从而得到有序数组。

2026-03-13 22:28:02 357 4

原创 数据结构算法—归并排序

先把乱牌拆到 “每张都孤单”,再两两凑成整齐的小堆,最后把小堆一步步拼成整副整齐的牌 —— 这就是归并排序的核心思路。

2026-03-13 22:27:30 591 3

原创 数据结构算法——快速排序

快速排序是一种基于的高效排序算法,快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

2026-03-08 19:14:19 353 4

原创 数据结构排序算法—选择排序

选择排序是一种简单排序算法,核心为每次从未排序区间选出最小(大)元素,放到已排序区间的末尾,直至整个序列有序。

2026-03-08 19:13:44 389 1

原创 数据结构排序算法—插入排序

排序算法的核心作用就是,一方面能让查找、去重、合并这些常见操作的效率呈几何级提升,另一方面它也是数据库、搜索引擎、排行榜等各类软件功能的底层基础 —— 没有排序,很多高效的数据处理逻辑根本无法实现。

2026-02-22 23:18:46 758 11

原创 数据结构二叉树—链式结构(下)

二叉树的销毁不能直接把每一个节点销毁掉,因为如果把父节点销毁掉整棵子树就会弄丢造成如果我们把1这个节点直接删除掉我们找不到1的左右子树了但是剩下的几点依然会占用堆区,所以我们应该从叶子节点开始删除,所以这里我们使用来遍历每一个根然后进行销毁。

2026-02-22 19:18:07 629 9

原创 数据结构二叉树—链式结构(中)

为什么是1?因为我们的size初始化在函数的,出了这个函数的作用域,局部变量就还给了操作系统而每一次函数调用都会建立新的函数栈帧,每一个栈帧里面都有一个size,没有办法把每一个函数栈帧里面的size相加所以打印出来的结果就是1,所以现在我们就需要使用关键字把局部变量转化为静态局部变量,而,静态局部变量只能初始化一次且只能在本函数引用但是我们如果多打印几次。

2026-02-13 18:26:01 700 6

原创 数据结构二叉树—堆(2)&链式结构(上)

我们接着上一章节将起。

2026-02-13 18:25:49 695 8

原创 数据结构二叉树——堆

衍生的特殊数据结构,也是二叉树体系中最具实用价值的结构之一(比如堆排序、优先队列都依赖堆)。如果有一个关键码的集合 K={k0,k1,k2,...,kn−1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki​<=K2∗i+1​(Ki​>=K2∗i+1​ 且 Ki​<=K2∗i+2​),i=0、1、2……则称为小堆(或大堆),将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆如果是建立的小堆,那父节点就一定小于子节点如果是建立的大堆,那父节点一定大于子节点。

2026-02-04 23:04:21 1180 9

原创 数据结构二叉树介绍

树是一种,它是由n(n>=0)个有限结点组成一个。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为。

2026-02-04 23:03:47 669 9

原创 数据结构空间复杂度

空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法, 注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。执行递归:先将Fib(N-1)的调用栈执行到底(直到Fib(2)/Fib(1)),再回溯计算Fib(N-2),总空间开销 = 栈帧最大深度 × 单个栈帧空间 = (N−1)×O(1),忽略常数项,故为O(N)(从Fib(N)到Fib(1)的链式深度),每个栈帧为常数级O(1)空间;

2026-01-29 11:51:00 792 11

原创 数据结构时间复杂度

需要执行log₂n次循环。此时时间复杂度为:O(log₂n)算法分析中,

2026-01-29 11:50:37 911 9

原创 C语言文件操作

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

2026-01-20 22:05:39 780 8

原创 C语言栈和队列的实现

栈(Stack)是一种操作受限的线性数据结构,它的核心规则是先进后出(FILO, First In Last Out)最先放入栈的元素,最后才能取出;最后放入的元素,最先能取出比如:叠盘子:新盘子总是叠在最上面(入栈),取盘子也只能从最上面拿(出栈),不能从中间或底部抽,这就是栈的核心逻辑栈的操作范围被严格限制在栈顶(Stack Top)只有栈顶的元素能被读取或删除,栈底(Stack Bottom)的元素只能等上面所有元素都取出后才能操作。

2026-01-11 23:35:11 1040 8

原创 C语言单链表

单链表是 C 语言中一种线性、非连续存储的数据结构,它不像数组那样占用一块连续的内存空间,而是由一个个独立的「节点」通过指针串联而成,且只能从前往后单向遍历。

2026-01-11 23:34:49 1021 6

原创 C语言顺序表

顺序表是c语言中的一个初阶的数据结构,相对简单,顺序表底层其实就是数组,物理上一定连续,逻辑上也连续。

2026-01-01 21:51:16 1246 6

原创 c语言动态申请内存

不管是c还是c++都会大量使用,使用c/c++的数据结构的时候也会使用的动态内存目前我们申请内存就只有两种方式,一种是创建变量,一种是创建数组。

2025-12-27 20:55:29 1334 2

原创 自定义类型:联合体和枚举

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型, 但是编译器只为最大的成员分配足够的内存空间,联合体的特点是所有成员共用同⼀块内存空间,所以联合体也叫:共用体给联合体其中⼀个成员赋值,其他成员的值也跟着变化那为什么是4个字节呢?

2025-12-26 21:25:14 723 6

原创 自定义类型:结构体

位段的声明和结构是类似的,有两个不同:位段的成员必须是int,unsigned int 或signed int,在C99中位段成员的类型也可以 选择其他类型位段的成员名后边有⼀个冒号和⼀个数字struct Aint _a:2;int _b:5;int _c:10;int _d:30;

2025-12-25 23:58:46 1029 8

原创 数据在内存中的存储(2)

我们继续看我们没做完的题。

2025-12-20 16:38:20 889 13

原创 c语言内存函数和数据在内存中的存储(1)

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置这个函数在遇到 '\0' 的时候并不会停下来如果source和destination有任何的重叠,复制的结果都是未定义的使用内存拷贝函数memcpy,将整型数组arr1中前5个元素(对应20字节)的数据,复制到整型数组arr2中,最终遍历输出arr2的所有元素,对于重叠的内存,交给memmove来处理。

2025-12-19 22:28:20 1170 8

原创 字符函数和字符串函数

C语语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头⽂件是“ctype.h”这些函数的使用方法非常类似,我们就讲解⼀个函数的事情,其他的非常类似islower 是能够判断参数部分的 c 是否是小写字母的。通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回 0。

2025-12-19 22:28:05 1305 9

原创 深入理解指针(4)

在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间大小的,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。sizeof 只关注占用内存空间的大小,不在乎内存中存放什么数据所以不管我们的数据是不是数据类型,编译器都会认为sizeof后面的是数据类型来进行处理。

2025-12-12 22:18:49 1740 12

原创 深入理解指针3

在指针的类型中,我们知道有一种指针类型为字符指针char*还有一种使用方式。代码const char*pstr="hello bit",特别容易让同学们以为是把字符串hello bit放到字符指针pstr里面,但是本质是把字符串hello bit首字符的地址放到了pstr中上面代码的意思是把一个常量字符串的首字母h的地址存放到指针变量pstr中《剑指offer》中收入一道和字符串相关的笔试题。

2025-12-06 15:35:06 831 12

原创 深入理解指针(1)

首先,必须理解,计算机内是有很多的硬件单元,而硬件单元是要互相协同⼯作的。我们发现在main函数内部,创建了a和b,a的地址是0x000000e77ccff9e4,b的地址是0x00000077ccffa04,在调用Swap1函数时,将a和b传递给了Swap1函数,在Swap1函数内部创建了形参x和y接收a和b的值,但是x的地址是0x000000e77ccff9c0,y的地址是0x000000e77ccff9c8,x和y确实接收到了a和b的值,不过x的地址和a的地址不。这就是指针变量的类型差异带来的变化。

2025-12-05 21:59:22 852 7

原创 深入理解指针(2)

在上一个章节中,我们在使用指针访问数组的内容时有这样一句代码在这里我们使用&arr[0]的方式拿到了数组第1个元素地址。但是其实数组名本来就是地址,而且是数组少元素的地址。我们发现数组名和数组首元素的地址打印出来的结果一模一样,数组名就是数组首元素的地址。这时候有人会疑问,数组名如果是首元数的地址,那下面的代码怎么理解?输出的结果是40,如果arr是数组首元素的地址,那输出应该是4或者8才对,其实数据名就是数组首元素的地址是对的,但是有两个例外。

2025-12-05 21:58:33 827 9

原创 函数递归的应用

递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的方法,在C语⾔中,递归就是函数自己调用自己写一个简单的递归代码上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问 题,代码最终也会陷入死递归,导致栈溢出(Stackoverflow)

2025-11-28 21:27:52 1570 13

原创 VS实用调试技巧

bug本意是“昆⾍”或“虫子”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或 问题,简称程序漏洞。“Bug”的创始⼈格蕾丝·赫柏(GraceMurrayHopper),她是⼀位为美国海军⼯作的电脑专家, 1947年9月9日,格蕾丝·赫柏对HarvardMarkII设置好17000个继电器进⾏编程后,技术⼈员正在进⾏ 整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨⼤的计算机内部⼀组继电器的 触点之间有⼀只⻜蛾,这显然是由于⻜蛾受光和热的吸引,⻜到了触点上,然后被高电压击死。

2025-11-28 21:24:41 1482 7

原创 c语言函数应用

了解了库函数,我们的关注度应该聚焦在⾃定义函数上,⾃定义函数其实更加重要,也能给程序员写 代码更多的创造性⼀般我们在使用函数的时候,直接将函数写出来就使用了比如:我们要写⼀个函数判断⼀年是否是闰年return 1;printf("闰年\n");elseprintf("⾮闰年\n");return 0;表示函数的调用,int is_leap_year(int y)表示函数的定义接下来我们把函数的定义放在主函数下面。

2025-11-21 19:07:24 1164 13

原创 c语言数组

数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息,数组中存放的是1个或者多个数据,但是数组元素个数不能为0,数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。

2025-11-07 18:04:47 1104 11

空空如也

空空如也

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

TA关注的人

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