自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 list的模拟实现

clear,顺序表vector不需要释放空间,因为没法单独释放一部分空间,而链表list可以。这里的T*也分为const和不带const,所以加上class Ptr。但我们需要的是it++,可以被修改,不被修改的是指向的内容不被修改。(第二个const迭代器,第三个是带不带const的->的重载)这里是const迭代器的关键,返回的*it,就是指向的位置。里面必须加const,因为返回的end()具有常性。

2024-07-23 19:01:46 974 22

原创 vector的模拟实现

/_start的原来空间已经释放,需要tmp,或者可以提前保存size()的大小,//因为size()返回的是_finish-_start,_start的指向已经变了所以,size()的大小是不确定,// 可以提前存size()的大小,这样就解决了指向改变的问题,可以在if外面,里面也可以,因为扩容才会改变指向。//insert的模拟实现,vector中的insert是用迭代器实现的,库里会返回pos这个位置。//erase的模拟实现,库里会返回删除位置的下一个位置,用的也是迭代器。

2024-07-16 18:04:57 1811 11

原创 string的模拟实现

分情况://resize的模拟实现,可以删除数据,也可以扩容,不缩容,当_capacity为15,_size为10时。//resize(8)就是删除数据(删除两个),resize(12)就是插入数据,resize(18)就是扩容。15find的模拟实现,从pos位置找一个字符,返回下标位置。14erase的模拟实现,pos位置后删除len个字符。12insert的模拟实现,pos位置插入字符串。20resize的模拟实现,可以删除数据。16find的模拟实现,找字符串。30>>的模拟实现,流插。

2024-07-09 11:12:33 1958 29

原创 const括号前括号后

注意,在上面的例子中,printValue 函数有两个 const 修饰符:一个用于指定函数不会修改调用它的对象(即 *this),另一个用于指定传递给函数的参数是一个常量对象。const在*之后(等价于在指针和*之间不加空格):表示指针本身是常量,即指针的值(即它所指向的地址)不能被修改,但可以通过这个指针来修改它所指向的数据(如果该数据不是常量)。总结来说,const在括号前后的位置决定了它是修饰指针本身、指针所指向的数据、函数参数、函数返回类型,还是类成员函数。

2024-07-08 16:33:17 681 5

原创 函数模版和类模版

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。

2024-07-01 15:20:37 2257 18

原创 日期类的实现

知识点:// 后置++,后置++是先使用后+1,因此需要返回+1之前的旧值,故需在实现时需要先将this保存一份,然后给this + 1。知识点:拷贝构造,内置类型,自定义类型都会处理。默认赋值重载跟拷贝构造一个性质,拷贝构造是定义时,赋值重载是两个已经存在的。知识点:流插入流提取只能写在类外,因为需要两个接收值,要是在类内就会有隐藏的this指针,要用friend,友元函数声明。首先要实现一个获取月份天数的函数,要实现是否是闰年或平年,以及二月份的天数。知识点:日期+=天数,+=改变了自身,*

2024-06-30 10:05:33 1613 23

原创 约瑟夫环问题

目录约瑟夫环问题是一个很经典的问题:一个圈共有N个人(N为不确定的数字),按顺序第一个人的编号为1,第二个人的编号为2,第三个人的编号就为3,以此类推第N个人的编号就为N,现在提供一个数字K,从第一个人开始报数(从1到K),依次类推,报到M这个数字的人出局,紧接着从出局的这个人的下一个人重新开始从1报数,和上面过程类似,报到K的人出局,直到N个人全部出局,请问,这个出局的顺序是什么?

2024-06-29 18:06:25 861 3

原创 C++类和对象总结

公共部分(public):这部分包含类的成员函数和可以被外部访问的成员变量(尽管在良好的实践中,成员变量通常被声明为私有的)。public成员可以在任何地方被访问,protected成员只能在类的成员函数和派生类中被访问,而private成员只能在类的成员函数中被访问。在大括号内部,可以定义类的成员变量和成员函数。子类可以添加新的成员变量和成员函数,也可以重写父类的成员函数(通过函数覆盖)。在C++中,类的访问控制是一个重要的特性,它允许程序员定义类的成员(包括成员函数和成员变量)的可见性和可访问性。

2024-06-22 11:06:35 2213 29

原创 打印%d的多种形式

但是,请注意 10e-3 这样的表示在C语言中可能是有问题的,因为编译器可能会将其解释为 10.0 * e - 3,其中 e 被视为一个未定义的变量(除非你在其他地方定义了它)。在C语言中,%d 是用于打印十进制整数的格式说明符,而 %e 是用于打印浮点数(通常是 float 或 double 类型)的科学计数法形式的格式说明符。但如果你是在谈论类似 10e-3 或 1.0e+2 这样的表示,那么这是浮点数的一种科学计数法表示。在这个例子中,整数123是左对齐的,并在其右侧用空格填充到指定的宽度。

2024-06-21 10:35:37 980 5

原创 this指针小总结

在类的非静态成员函数中,this指针是一个指向调用该函数的对象的指针。注意,this指针是常量指针,你不能改变this指针使其指向其他对象,但你可以改变它所指向的对象的内容。在C++中,this指针只在类的非静态成员函数中存在,而在全局范围内,是没有this指针的。在C++中,this指针是一个隐式的、非静态的成员指针,它指向调用它的对象的地址。每个非静态成员函数都含有一个this指针,该指针在成员函数中用于访问调用它的对象的成员。当成员函数被调用时,this指针被自动绑定到调用该函数的对象的地址上。

2024-06-19 12:55:28 1462 7

原创 C++前期概念(重)

1、基本任何场景都可以引用传参2、谨慎用引用做返回值。出了函数作用域,对象不在了,就不能用引用返回,还在就可以用引用返回引用的读写功能和优点查找和修改改进引用和指针的区别引用和指针的不同点:1. 引用概念上定义一个变量的别名,指针存储一个变量地址。2. 引用在定义时必须初始化,指针没有要求3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体4. 没有NULL引用,但有NULL指针。

2024-06-16 12:25:11 2629 27

原创 C++入门小结

总结来说,C++ 的输入和输出操作是通过流类来实现的,这些流类提供了简单易用的接口来处理数据的不同来源和目标。总结来说,C++ 中的缺省参数提供了一种灵活的方式来为函数定义默认值,使得函数调用更加简洁,同时也支持函数重载和构造函数的灵活使用。6.命名空间与命名遮蔽:如果在命名空间内部定义了一个与全局变量或函数同名的成员,那么在命名空间内部,该全局成员会被遮蔽(隐藏)。总之,C++ 命名空间是一种非常有用的特性,可以帮助开发者组织代码、避免命名冲突,并提高代码的可维护性。5.命名空间的别名:可以使用。

2024-06-14 10:16:58 1731 10

原创 十种排序方法

外层循环遍历数组中的每个元素(从第二个元素开始),内层循环则将当前元素(称为key)与其前面的元素进行比较,如果前面的元素比key大,则将它们向后移动一位,直到找到key的正确位置或者已经到达数组的开始。快速排序的基本思想是:选择一个基准元素(pivot),通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。是插入排序的一种更高效的改进版本,也称为缩小增量排序。

2024-06-11 13:17:57 2151 32

原创 操作符的优先级和ASCll码表

2024-06-11 13:15:36 99 4

原创 树的4种遍历

树的四种遍历方式的总结树的四种遍历方式的总结树的四种遍历方式(前序遍历、中序遍历、后序遍历和层序遍历)是理解和操作二叉树的基础。以下是这四种遍历方式的总结:1. 前序遍历(Pre-order Traversal)访问顺序:根节点 -> 左子树 -> 右子树递归实现简单直观,先访问根节点,然后递归遍历左子树,最后递归遍历右子树。非递归实现通常使用栈来辅助遍历,先将根节点压栈,然后在循环中出栈并访问当前节点,接着将右子节点和左子节点依次压栈(注意顺序)。

2024-06-10 09:53:56 1172 8

原创 二叉树小结

二叉树是一种特殊的树,每个节点最多有两个子节点,通常被称为左子节点和右子节点。例如,如果一个应用需要频繁的插入和删除操作,并且对内存使用有严格的要求,那么可能会选择一种平衡二叉树,如红黑树,因为它在保证平衡的同时,也尽量减少了内存的消耗。:如果需要高性能的搜索和排序操作,可以选择平衡二叉树,如AVL树或红黑树,因为它们能够保持树的平衡,从而保证操作的时间复杂度。:也称为排序二叉树或搜索二叉树,它的特点是左子树上所有节点的值均小于或等于根节点的值,右子树上所有节点的值均大于根节点的值。

2024-06-09 10:25:48 1056 22

原创 顺序表、链表、栈和队列总结

顺序表、链表、栈和队列都是线性数据结构,但它们在管理和访问数据方面有不同的特点和用途。的结构实现更优一些,因为如果使用数组的结构,出队列在数 组头上出数据,效率会比较低。链表是由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。是一种线性表,在C语言中通常通过数组来实现。的结构实现更优一些。栈的实现一般可以使用数组或者链表实现,相对而言。队列是一种先进先出(FIFO)的数据结构。栈是一种后进先出(LIFO)的数据结构。队列也可以数组和链表的结构实现,使用。下面是一个简单的顺序表在C语言中的。

2024-06-08 10:24:10 1483 7

原创 双链表的实现

【代码】双链表的实现。

2024-06-07 10:50:44 205 4

原创 单链表的实现

【代码】单链表的实现。

2024-06-07 10:49:56 287 1

原创 队列数据结构

FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。队列也可以数组和链表的结构实现,

2024-06-05 11:16:37 1018 12

原创 顺序表数据结构

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

2024-06-04 12:50:58 617 28

原创 链表逆序用哨兵位头节点

在C语言中实现链表的逆序,使用哨兵头节点是一种常见的做法。哨兵头节点可以简化代码逻辑,特别是当链表为空时,可以避免空指针异常。下面是一个使用哨兵头节点逆序单链表的C语言实现。

2024-06-02 10:50:08 658 12

原创 反转链表和哨兵位

int val;} ListNode;

2024-06-01 12:33:26 1329 12

原创 删除有序数组中的重复项

【代码】删除有序数组中的重复项。

2024-05-31 10:18:24 507 6

原创 strcat的使用和模拟实现

• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。• 源字符串必须以 '\0' 结束。,能容纳下源字符串的内容。• ⽬标空间必须可修改。• 可以自己给自己追加。可以确定到追加到哪一个。

2024-05-30 08:20:35 378 7

原创 学生信息管理系统(静态版)

学生信息管理系统(静态版)

2024-05-29 08:07:37 687 4

原创 通讯录的实现

13、排序(用年龄,名字都行),用年龄举例,sqort用法有说过。1、人的信息:姓名+年龄+性别+地址+电话。2、通讯录中可以存放100个人的信息。知识点:typedef:重命名。6》排序(用年龄,名字都行)7、用do-while循环。11、修改指定联系人的信息。12、显示所有联系人的信息。3》查找指定联系人的信息。4》修改指定联系人的信息。5》显示所有联系人的信息。知识点:-加数字左对齐。4、先写一个菜单函数。

2024-05-28 12:43:10 713 19

原创 结构体知识点

1.结构的声明1.结构的声明。

2024-05-27 10:12:19 281 13

原创 strstr的使⽤和模拟实现

Returnsa pointer to the irst occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置)。(字符 串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志)。strstr的模拟实现。strstr的模拟实现。

2024-05-27 10:11:10 225 1

原创 操作符的优先级

2024-05-26 14:29:40 120 1

原创 动态内存管理

• 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整 但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知 道,那数组的编译时开辟空间的⽅式就不能满⾜了。• 有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的使 ⽤内存,我们⼀定会对内存的⼤⼩做灵活的调整。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。• 这个函数调整原内存空间⼤⼩的基础上,还会将原来内存中的数据移动到 新 的空间。

2024-05-26 14:25:10 566 2

原创 memmove使⽤和模拟实现

• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。• 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。输出的结果:1 2 1 2 3 4 5 8 9 1。这是memmove在库里的定义,具体可在。二:memmove的模拟实现。

2024-05-25 12:03:37 319 3

原创 qsort的使用和模拟实现

这是memmove在库里的定义,具体可在查看二:使⽤qsort排序结构数据先定义一个结构体1:假 设 按 照 年 龄 来 比 较2:strcmp - 是 库 函 数 , 是 专 门 用 来 比 较 两个 字 符 串 的大 小 的,假 设 按 照 名 字 来 比 较3:用qsort调用以上函数进行快排三:模拟使用使⽤回调函数,模拟实现qsort(采⽤冒泡的⽅式)。注意:void*有讲解。

2024-05-25 11:50:26 439 1

原创 strcmp的使⽤和模拟实现

如果两个字符串的前n个字符都相同,但其中一个字符串的长度小于n(也就是说,一个字符串提前遇到 \0结束符),那么strncmp` 会将较短的字符串视为“较小”的字符串。如果 s1 的前 n 个字符在字典顺序上小于 s2 的前 n 个字符,或者 s1 是一个较短的字符串(即 s1 在 n 个字符内遇到 \0),返回一个负数。如果 s1 的前 n 个字符在字典顺序上大于 s2 的前 n 个字符,或者 s2 是一个较短的字符串(即 s2 在 n 个字符内遇到 \0),返回一个正数。三:strncmp函数的使用。

2024-05-24 17:08:00 565 1

原创 有序的一维数组中插入一个整数并保持其有序性

在C语言中,要在已排序的一维数组中插入一个整数并保持数组的有序性,你需要首先找到插入点的位置(即该整数应该插入的位置),然后将该位置及其后的所有元素向后移动一个位置,以便为新元素腾出空间。在insertIntoSortedArray函数中,我们通过一个循环找到新元素应该插入的位置,并将该位置及其后的所有元素向后移动一个位置。insertIntoSortedArray函数接受一个指向数组的指针arr,一个指向当前数组大小的指针size,以及要插入的整数num。使用指针遍历数组,找到新元素应该插入的位置。

2024-05-24 17:04:10 888 4

原创 memcpy的使⽤和模拟实现

这是memcpy在库里的定义,具体可在查看•num单位是字节,下面的模拟实现需要强制类型转换•函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。• 这个函数在遇到 '\0' 的时候并不会停下来。• 如果source和destination有任何的重叠,复制的结果都是未定义的。对于重叠的内存,交给memmove来处理。(下期会有)memcpy的使⽤的代码void和void*的用法已经发布。

2024-05-23 13:07:42 1248 7

原创 void和void*

然后,它将value存储在新分配的内存中,并返回一个指向该整数的指针,但指针的类型是void*。是的,在C语言中,函数名定义为返回void*类型确实可以返回值。void*是一个特殊的指针类型,被称为通用指针或空指针,它可以指向任何类型的数据。因此,当函数被定义为返回void*类型时,它可以返回一个指向任何类型数据的指针。void* 类型的指针本身是一个地址,不能直接打印为具体的值,因为它不指向一个具体的类型。如果你需要函数返回某种类型的数据,那么你应该在函数定义中指定返回类型,而不是void。

2024-05-23 13:03:01 474 1

原创 对AIGC行业的看法

然而,进入该行业需要充分了解行业的特点和趋势,掌握相关的技术和知识,并制定相应的商业计划和风险应对策略。此外,随着定制化AIGC工具的普及,AIGC服务将变得更加精准和多样化,进一步推动整个行业的创新和发展。首先,AIGC技术门槛较高,需要掌握较为复杂的算法和编程技能,这对个人的技术能力和学习能力提出了较高的要求。AIGC行业涉及到人工智能、机器学习、自然语言处理等多个领域的技术,因此具备相关的编程、算法和数据科学技能将是非常有竞争力的。从市场需求的角度来看,AIGC行业人才的需求呈现出快速增长的趋势。

2024-05-22 21:58:13 513 2

原创 signed和unsigned

在C语言中,signed和unsigned是用来描述整数类型的修饰符。signed修饰的整数类型可以表示正、负或零的值,而unsigned修饰的整数类型只能表示非负的值。例如,signed int可以表示正数、负数和零,而unsigned int只能表示非负数和零。默认情况下,如果不显式地指定修饰符,int类型被认为是signed int。在使用signed和unsigned之间做选择时,需要考虑数值的范围和运算的需求。

2024-05-22 21:56:56 361

原创 辗转相除法

递归性质:对于任意两个正整数a和b(a>b),它们的最大公约数等于b和a除以b的余数r的最大公约数。需要注意的是,虽然辗转相除法在处理大数时可能会比较慢(因为其时间复杂度为O(log(min(a,b)))),但它仍然是一个非常重要的算法,因为它不仅简单易懂,而且在实际应用中具有广泛的应用,如密码学、线性代数等领域。整除性质:如果两个整数a和b的最大公约数是d,那么对于任何整数k,a和b的线性组合ax+by(其中x和y是整数)也能被d整除。初始化两个整数a和b,其中a是较大的数,b是较小的数。

2024-05-21 12:33:54 330 4

空空如也

空空如也

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

TA关注的人

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