自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程概念(Linux)

笔记本,服务器,PC等大部分计算机都遵守冯诺依曼体系。这里的存储设备指的是内存,我们计算机存放游戏的磁盘叫外存!!CPU能且只能对内存进行读写!

2025-04-04 15:22:24 685

原创 vim的一般操作(分屏操作) 和 Makefile 和 gdb

(也就是make),不过,我们可以显示要make执行。即命令—“make clean”,以此来清除所有的目标文件,以便重编译。

2025-03-22 13:33:27 908

原创 哈希表以及封装unordered_map及其set

当key是string 等类型时,key不能取模,那么我们需要给其增加一个仿函数,这个仿函数支持把key转换成一个可以取模的整形,如果key可以转换为整形并且不容易冲突,那么这个仿函数就用默认参数即可,如果这个Key不能转换为整形,我们就需要自己实现一个仿函数传给这个参数。理想情况是找出一个好的哈希函数避免冲突,但是实际场景中,冲突是不可避免的,所以我们尽可能设计出优秀的哈希函数,减少冲突的次数,同时也要去设计出解决冲突的方案。断往后探测,直到寻找到下一个没有存储数据的位置为止。

2025-03-20 15:16:52 1022

原创 C++11(智能指针)

6. 把ListNode结构体中的_next和_prev改成weak_ptr,weak_ptr 绑定到 shared_ptr时不会增加它的引用计数,_next和_prev不参与资源释放管理逻辑,就成功打破了循环引用,解决了这里的问题.多个shared_ptr指向资源时就++引用计数,shared_ptr对象析构时就--引l用计数,引用计数减到o时代表当前析构的shared_ptr是最后一个管理资源的对象,则析构资源。左边节点中的_next管着呢,_next析构后,右边的节点就释放了。

2025-03-19 13:06:27 996

原创 C++11特性(笔记二lambda,function)

一般是用auto。

2025-03-02 19:07:07 778

原创 C++11特性(笔记一)

二.C++11中的std::initializer list(主要用于初始化)

2025-03-02 00:16:20 873

原创 Linux 常见指令 和 文件访问权限的设置(笔记)

目录自己的笔记,所以有些简单的不写了(没那么多时间)一.Linux 常见指令1.ls2.pwd 3 cd4.rmdir 指令 && rm 指令5.man 指令6.cp 指令7.less 指令8.head 指令9.tail 指令10.alias 指令11.grep 指令12.zip/unzip 指令13.tar指令二.文件访问权限的相关设置方法1. chmod2. chown3. chgrp4.使用 sudo 分配权限功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。用

2025-02-26 00:34:57 1066

原创 红黑树简单讲解

红黑树是一棵二叉搜索树,他的每个结点增加一个存储位来表示结点的颜色,可以是红色或者黑色。通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,,因而是接近平衡的。

2024-11-26 12:39:43 545

原创 AVL树解析

2.AVL树实现这里我们引入一个平衡因子(balance factor)的概念,每个结点都有一个平衡因子,任何结点的平衡因子等于右子树的高度减去左子树的高度,也就是说任何结点的平衡因子等于0/1/-1。1.AVL树是最先发明的自平衡二叉查找树,AVL是一颗空树,或者具备下列性质的二叉搜索树:它的。在parent的左子树,parent平衡因子--,parent的平衡因子初始化为 0.在parent的右子树,parent的平衡因子++,这里是二叉搜索树的,简单的代码总结。太长了,随便写点了,脑子坏了!

2024-11-12 20:46:11 864

原创 map和set和pair

一般情况下,我们都不需要传后两个模版参数。set底层是用红黑树实现,增删查效率是O(logN),迭代器遍历是走的搜索树的中序,所以是有序的。map,set 和 vector/list等容器的使用,STL容器接口设计,高度相似。map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第二个模版参数,map底层存储数据的内存是从空间配置器申请的。一般情况下,我们都不需要传后。

2024-11-05 20:39:42 884

原创 二叉搜索树

那么这样的效率显然是无法满足我们需求的,我们后续课程需要继续讲解二叉搜索树的变形,平衡二叉搜索树AVL树和红黑树,才能适用于我们在内存中存储和搜索数据。二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义,后续。另外需要说明的是,二分查找也可以实现 O(logN)级别的查找效率,但是二分查找有。,因为这两个结点中任意一个,放到N的位置,都满足二又搜索树的规则。4.无法直接删除N结点,因为N的两个孩子无处安放,只能用替换法删除。2.最多查找高度次,走到到空,还没找到,这个值不存在。

2024-10-25 12:50:44 736 1

原创 c++_ 多态

基类的析构函数为虚函数,此时派生类析构函数只要定义,无论是否加virtual关键字,都与基类的析构函数构成重写,虽然基类与派生类析构函数名字不同看起来不符合重写的规则,实际上编译器对析构函数的名称做了特殊处理,编译后。但是要注意的这里继承下来的基类部分虚函数表指针和基类对象的虚函数表指针不是同⼀个,就像基类对象的成员和派生类对象中的基类对象成员也独立的。• 派生类中重写的基类的虚函数,派⽣类的虚函数表中对应的虚函数就会被覆盖成派⽣类重写的虚函数地址。),称派生类的虚函数重写了基类的虚函数。

2024-10-05 11:11:56 1003

原创 c++ 继承 和 组合

下⾯我们看到Person是基类,也称作父类。man是派生类,也称作子类。(因为翻译的原因,所以既叫基类/派生类,也叫父类/子类)继承的结构。

2024-09-24 22:50:15 1114

原创 c++_list

kw=liststd:: list列表列表是序列容器,允许对序列中任意位置的恒定时间插入和擦除操作,以及双向迭代。列表容器实现为双向链表;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。排序在内部通过与指向其前面的元素的链接和指向其后元素的链接的每个元素的关联来保持。它们与非常相似:主要区别在于对象是单链表,因此它们只能向前迭代,以换取更小、更高效。与其他基本标准序列容器(arrayvector和deque。

2024-09-17 15:39:18 1156

原创 c++的 stack 和 queue(deque) 和 priority_queue 和 适配器

2.1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2.2 queue的使用3.1priority_queue的介绍优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用默认情况下priority_queue是大堆。3.2 priority_queue的使用。

2024-09-12 20:51:32 999

原创 vector 常见函数

如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出此部分的元素(并销毁它们)。也大于当前容器容量,则会自动重新分配分配的存储空间(capacity)。大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到。在所有其他情况下,函数调用不会导致重新分配,并且向量容量不受影响。的副本,否则,它们将进行值初始化.,则新元素将初始化为。从任意位置删除一个元素。

2024-09-03 14:50:44 519

原创 string的常用函数

擦除字符串的内容,该字符串将变为空字符串(长度为 0 个字符)。而cin>> 遇到空格(' ')就会停止输入。请求根据计划的大小更改调整空间的大小。在pos 位置 插入 字符 或 字符串。请求更改容量(capacity)可以参考返回值,判断是否相同。直到遇到 ‘\n’ 才会停止。rbegin 指向尾。计算分配的空间的大小。都是增加字符串的函数。

2024-08-24 16:33:47 1755 1

原创 指定的任务可执行文件“CL.exe”未能运行解决办法

大部分应该是因为控制台。

2024-08-04 17:44:20 364

原创 c++ 内存管理

在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与。,实际在operator delete[]中调用operator delete来释放空间。,在operator new[] 中实际调用 operator new函数完成N 个对。是高效的I/O映射方式,用于装载一个共享的动态内存库。--非静态局部变量/函数参数/返回值等等,栈是向下增长的。用于程序运行时动态内存分配,堆是可以上增长的。,完成对象中资源的清理工作,,完成N个对象中资源的清理,释放的对象空间上执行。

2024-07-29 00:55:57 830

原创 c++模板初阶

根据实参自动推演模板参。

2024-07-28 13:55:01 318

原创 C++ 基础(类和对象下)

4.2内部类默认是外部类的友元类内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。

2024-07-24 15:20:35 341

原创 c++基础(类和对象中)(类的默认成员函数)

4. 对象生命周期结束时,系统会自动调用析构函数。5. 跟构造函数类似,我们不写编译器自动生成的析构函数对内置类型成员不做处理,自定类型成员会调用他的析构函数。6. 自定义类型成员。

2024-07-21 14:07:19 637

原创 数据结构排序合集(笔记)

插入排序:希尔排序(

2024-07-21 13:51:43 293

原创 c++基础(类与对象上)

1. class为定义类的关键字,类体中内容称为类的成员:类中的变量 称为类的属性 或 成员变量;类中的函数 称为类的方法 或者 成员函数。2. 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加 _ 或者 m开头,比如:3.C++中struct也可以定义类(C++兼容C中struct的用法)⼀般情况下还是推荐用class定义类。(因为struct默认类里面全是public(也就是成员和函数全部公开)而class则全是private(全部成员和函数 不公开))( 1.2的第三点

2024-07-15 17:09:26 936

原创 C++基础

日常小练习程序为了方便推荐使用。

2024-07-13 14:59:39 638

原创 树 和 二叉树 和 堆 之间的关系

一个结点含有的子树的个数称为该结点的度;如上图:A的为6.:度为0的结点称为叶结点;如上图:B、C、H、I...等结点为叶结点:度不为0的结点;如上图:D、E、F、G...等结点为分支结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;如上图:A是B的父结点:一个结点含有的子树的根结点称为该结点的子结点;如上图:B是A的孩子结点:具有相同父结点的结点互称为兄弟结点;如上图:B、C是兄弟结点:一棵树中,最大的结点的度称为树的度;如上图:树的度为6。

2024-06-11 19:56:24 965

原创 c语言数据结构—队列

操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头.

2024-05-15 13:04:52 348

原创 c数据结果——栈

其只允许在固定的一端进行插入和删除元素操作。因为数组在尾上插入数据的代价比较小。1.2 栈的实现栈的实现。1.1 栈:一种特殊的。

2024-05-12 15:42:38 145

原创 单链表OJ题

如果 slow走1步 ,fast 走 3 步4 步 5 步..... 他们会相遇吗?设他们相差 N 步,如果fast走 两 步,slow 走一步。上题已经说明 无论fast走 多少步都会相遇。(为什么一定会相遇?从头开始数L就可以找到进环的节点。= 偶数 - 奇数 ,最后肯定到 NULL 指针,这题其实也是推导公式,把他们。无法找到 NULL。就可以找到进环节点!来解决 也就是说他们。fast 每次 追一步。

2024-05-05 17:39:17 249

原创 sscanf 和 sprintf 和 fscanf 和 fprintf

我们也和 scanf 比较一下。fprintf 是一个。fscanf 是一个。,也就是 字符串打印。把 字符串 转换 为。

2024-04-01 18:34:18 332

原创 重生c语言之 我在博客学习 编译底层 原理 之 编译和链接

定义,因为宏已经被展开。并且包含的头⽂件都被插⼊到。

2024-03-29 15:07:55 733 1

原创 (c语言) 需要记忆 的 文件操作系列

磁盘(硬盘)上的文件是文件。程序文件、数据文件(从文件功能的⻆度来分类的)。

2024-03-27 09:11:02 966

原创 比较简单的结构体传参和位端

跟结构相⽐,

2024-03-24 11:22:27 522 1

原创 相对简单的 自定义类型:结构体

如果我们能保证将所有的double类型的数据的地址都对⻬成8的倍数,那么就可以⽤⼀个内存操作来读或者写值了。编译器会把上面的两个声明当成完全不同的两个类型,所以是非法的。4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。1.结构体的第⼀个成员对齐到和结构体变量起始位置偏移量为0的地址处。那在设计结构体的时候,我们既想要满⾜对⻬,⼜想要节省空间,就可以。其实是有问题的,在匿名结构体。

2024-03-22 13:17:11 749 1

原创 比较简单 的 指针进阶(基础一)

每个内存单元,相当于⼀个学⽣宿舍,⼀个人字节空间⾥⾯能放8个⽐特位,就好⽐同学们住的⼋⼈间,每个⼈是⼀个⽐特位。每个内存单元也都有⼀个编号(这个编号就相当于宿舍房间的⻔牌号),有了这个内存单元的号,CPU就可以快速找到⼀个内存空间。⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。总结: 内存单元的编号==地址==指针(重点)如图:每个内存(字节)都有个 地址(指针)在C语言中创建变量其实是向内存申请空间来存放数据int a = 10;表面上看,

2024-03-19 11:25:38 624 1

原创 简单的讲述 :整数和浮点数在内存中存储 (快速版)

这样做是为了表⽰±0,以及接近于0的很⼩的数, {也就是 2^(-127) }⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。IEEE 754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;转换为二进制时,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分,• (-1)^S 表示符号位,当S=0,V为正数;这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,

2024-03-17 11:46:54 905 1

原创 比较简单的 memcpy,memmove 内存函数模拟实现

• 函数memcpy从source的位置开始向后复制num个字节(很重要,记住是字节,不是个数)的数 据到destination指向的内存位置。• 这个函数在遇到'\0'的时候并不会停下来。• 如果source和destination有任何的重叠,复制的结果都是未定义的。

2024-03-15 11:07:05 295 3

原创 简单的 strncmp,strncpy , strncat 模拟实现

第⼀个字符串第⼆个字符串,则返回大的数字;◦ 第⼀个字符串第⼆个字符串,则;◦ 第⼀个字符串第⼆个字符串,则返回的数字;

2024-03-15 10:52:42 320 1

原创 三种方法模拟strlen

有人问为什么上面(size_t my_strlen2( char* arr))不是const char*arr每次递推,都向后一位 也就是 my_strlen3(arr + 1)因为要返回一个数,所以要1 + my_strlen3(arr + 1)因为有个警告,我还没搞懂,弄完我在评论区会留言噢。最后arr递推到 ‘\0’ 返回零。比较简易,不是全部的,但是够用!这个递归运用大事化小的思想。(指针的基础要牢记)

2024-03-08 15:41:27 226 1

原创 C语言,不用异或操作符,解决单身狗问题

注意不要让最后那个和前面的相等。最后那个也会打印出来。

2024-01-27 11:25:12 236 1

空空如也

空空如也

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

TA关注的人

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