- 博客(24)
- 收藏
- 关注
原创 C++11相关知识点
常见的左值和右值:1.2左值引用和右值引用对于左值引用而言,就是给左值取别名,同理右值引用就是给右值取别名。 1.2.1引用用于延长生命周期 右值引用可用于为临时对象延长生命周期,const的左值引用也能延长临时对象生存期,但这些对象无法被修改1.2.2左值引用相关回顾 左值引用主要使用场景是在函数中左值引用传参和左值引用传返回值时减少拷贝,同时还可以修改实参和修改返回对象的价值。左值引用已经解决大多数场景的拷贝效率问题,但是有些场景不能使用传左值引用返回,如下面addStr
2025-07-22 21:20:38
872
原创 C++哈希
哈希又叫做散列。本质就是通过哈希函数把关键字key和存储位置建立映射关系,查找时通过这个哈希函数计算出key存储的位置,进行快速查找。上述概念可能不那么好懂,下面的例子可以辅助我们理解。无论是数组还是链表,查找一个数都需要通过遍历的方式,假设用单向查找最坏的情况就是查找n次,假设双向查找最坏的情况是查找n/2次,在数据量很大的情况下查找一个数就变得比较困难。最好的情况就是希望一下子就可以找到目标数字,由此出现了哈希表。什么是映射关系?映射关系分为两种:一对一和一对多。
2025-05-29 15:52:20
952
原创 C++红黑树
在AVL树中增加了平衡因子来保证AVL树的平衡,而红黑树是依据颜色来限制,因此增加了表示颜色的限制元素。同时仍需要频繁的访问父亲节点,所以在红黑树中仍需要一个指向父亲的指针。在节点定义中将节点初始颜色设置为红色,是因为为了保证每一条路径黑色节点数保持一致的性质(该性质较难控制),设想一下:如果插入节点颜色是黑色,那么性质四就会被破坏,想重新让性质四成立 ,工程量巨大。因此将节点初始颜色设置为红色较佳。
2025-05-14 16:02:07
1049
原创 C++AVL树
AVL树的左右子树的高度差不能超过1,那么我们如何让快速判断是不是AVL树呢?我们可以引入平衡因子来解决这个问题。如果右子树比左子树高一层,则此时平衡因子为1;如果左子树比有子树高一层,则此时平衡因子为-1;如果右子树和左子树一样高,则此时平衡因子为0。(这里平衡因子计算是右子树-左子树,当然左子树-右子树也可以)依据此规则,如果平衡因子为2/-2,则说明平衡被打破。在调整不平衡的AVL树时,需要频繁访问父亲节点,所以在AVL树节点定义中,除了定义指向左右节点的指针以外,还需要一个指向父亲节点的指针。
2025-05-09 18:13:33
874
原创 C++map和set
键值对的定义: 3.树形结构的关联式容器 3.1 set 3.1.1 set的构造 函数声明 功能介绍 set (const Compare& comp = Compare(), const Allocator& = Allocator() ); 构造空的set set (InputIterator first, InputIterator last, const Compare& comp = Compare()
2025-05-02 11:40:50
618
原创 C++二叉搜索树
在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树。最多查找高度次,cur走到空,就说明查找的key不存在。从根节点开始查找,比根大往右,比根小往左。非空左子树的所有键值小于其根节点的键值。非空右子树的所有键值大于其根节点的键值。要想删除3,则需要将8的左孩子变成6。完全二叉树(或者接近完全二叉树)二叉搜索树又叫做二叉排序树,左右子树也分别为二叉搜索树。例子:中英配对,统计单词。,或者是具有以下性质的。单支树(或者类似单支)
2025-04-17 16:56:54
622
原创 C++继承
继承定义格式包括派生类,继承方式,基类以及派生类的内容protected:在上述代码中,student是派生类,public是继承方式,person是基类。1.2.2 继承方式和访问限定符继承方式:public protected private访问限定符:public访问 protected访问 private访问类成员/继承方式public继承protected继承private继承基类的public成员派生类的public成员派生类的protected成员。
2025-04-09 14:55:56
635
原创 C++模板
一个程序由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后所有目标文件链接起来形成单一的可执行文件成为分离编译模式。3.2模板的分离编译。
2025-04-05 21:06:42
820
原创 C++stack和queue
deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。注意:deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示 :deque实际上是一段一段空间拼接而成,用完了开的这一片空间之后才会去开另一块空间,并且这些空间由中控数组(指针数组)
2025-04-04 14:32:23
962
原创 【C++】list容器及其模拟实现
list是可以在常数范围内在进行插入和删除的序列式容器,并且该容器可以list的底层机构是,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指向前一个元素和后一个元素。list的最大缺点就是,即,要访问list中的元素就需要从前开始迭代,产生了线性时间的开销;另外list,以保存每个节点的的相关联信息。
2025-03-26 19:50:29
785
原创 C++赋值重载和运算符重载(日期类)
注意:无显式调用时,编译器会自动生成默认赋值运算符重载,默认赋值运算符重载行为跟默认拷贝构造函数类似,对内置类型成员变量会完成浅拷贝。3.⼀个重载运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数比运算对象少⼀个。2.⼀元运算符有⼀个参数,二元运算符有两个参数,二元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数。的对象直接的拷贝赋值,这⾥要注意跟拷贝构造区分,拷贝构造用于⼀个对象拷贝初始化给另⼀个。注意以上5个运算符不能重载。
2025-01-31 18:55:58
325
原创 C++类和对象
1.class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数2.C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是 struct中可以定义函数。3.定义在类面的成员函数默认为inline。class Date//注意class默认限定访问符是私有public://成员函数_day = day;
2025-01-26 15:47:37
244
原创 C++函数重载,引用和namespace
在C/C++中,变量、函数和后⾯要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。C++⽀持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。命名空间中可以定义变量/函数/类型等,也可以嵌套定义。
2025-01-25 18:17:50
324
原创 数据结构:链式二叉树
测试结果显示,两次调用结果都是1,这是因为s作为局部变量,当一个函数栈帧销毁的时候,局部变量也会销毁所以只能保存根节点的1.测试结果显示,两次调用结果也都是1,是因为传值调用,当一个函数栈帧销毁的时候,s仍会销毁所以只能保存根节点的。不为空,根节点入队列,取出队头,出队头,如果根的左右孩子不为空,则左右孩子入队列。思路:根节点+左节点+右节点。遍历顺序:根—>左—>右。遍历顺序:左—>根—>右。遍历顺序:左—>右—>根。思路:根+左/右(最大)思路:左叶子+右叶子。思路:左节点+右节点。
2024-12-11 15:01:36
435
原创 数据结构:堆的实现及其相关应用
2.完全二叉树:对于一个高度为h,有个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。15.有序树和无序树:树中结点的各子树从左到右是有次序的,不能互换,称该树为有序树,否则称为无序树;7. 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的双亲结点或父结点;6.孩子结点或子结点:结点的子树的根称为该结点的孩子结点或子结点;10.子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙;2.结点的度:一个结点拥有的子树的数目;
2024-12-01 20:15:51
774
原创 交换一个整数二进制位的奇数位和偶数位
思路:1.构建数组并取出二进制位。((x(目标数)>>1) &1)以此类推,取出二进制位就是。:右边舍弃,左边补符号位。:左边舍弃,右边补0。
2024-08-24 16:23:49
382
原创 文件操作和应用
实际上为num-1个,因为‘\0’自动补上(如果字符串长度大于num则在第num个位置上放上‘\0’,如果字符串长度小于num则不够的位置不上‘\0’)2. ⼆进制⽂件的读取结束判断,判断返回值是否⼩于实际要读的个数。1. ⽂本⽂件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )因为文件读取结束有两个原因:1.遇到文件末尾(feof) 2.读取发生错误(ferror)如果成功读取字符则返回字符的ASCII码值。如果成功读取字符则返回字符的ASCII码值。
2024-08-19 14:25:01
993
原创 结构体相关知识
从以上代码可以看到当主函数想要使用两个匿名结构体的时候编译器将两个声明当成两个完全不一样的类型,造成了非法访问,所以如果没有对匿名结构体进行重新声明的话,只能使用一次。4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。3.结构体总大小为最大对齐数(结构体中每个成员变量都有⼀个对齐数,所有对齐数中最大的)的 整数倍。2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。特殊情况:匿名结构体。
2024-08-01 17:00:28
462
原创 整数和浮点数在内存中的存储
⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。大端:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。小端:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。的⼀位是被当做符号位,剩余的都是数值位。
2024-07-30 20:15:29
507
原创 strncpy,strncmp,strncat的模拟实现
关键点:num表示从source中复制到destination中的个数。关键点:追加source中num个元素到destination里。关键点:将str2和str1第num位置上的元素进行对比。
2024-07-26 16:13:25
262
原创 strcpy,strcmp,strcat函数用法及其模拟实现
strcpy是覆盖拷贝,就是将src中的元素(包括’\0‘)全部拷贝到dest中。注:必须考虑dest的空间>=src的空间strcat是追加拷贝,必须保证目标空间足够大strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较标准规定:第一个字符串大于第二个字符串,则返回大于0的数字第一个字符串等于第二个字符串,则返回0第一个字符串小于第二个字符串,则返回小于0的数字。
2024-07-26 14:02:04
354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人