自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [C++]24:异常和智能指针

1.如何统一的去管理异常的抛出类型呢?2.抛出派生类的异常可以使用基类去捕获。//1.开辟空间:throw "除0错误";

2024-06-24 14:27:58 872 1

原创 [C++]22:C++11_part_one

默认成员函数:构造+析构 拷贝构造+拷贝赋值构造 取地址重载+const取地址重载 -------> 移动构造+移动赋值 , 一共有8个默认成员函数!1.如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个。那么编译器会自动生成一个默认移动构造。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。

2024-04-28 16:56:53 945 1

原创 linux基础8:文件系统

在Linux系统中,你可以使用mkdir命令来创建一个目录,并使用mount命令来挂载文件系统。

2024-04-06 17:03:12 904 1

原创 [C++ ]21:哈希+海量数据处理

很显然,过小的布隆过滤器很快所有的 bit 位均为 1,那么查询任何值都会返回“可能存在”,起不到过滤的目的了。另外,哈希函数的个数也需要权衡,个数越多则布隆过滤器 bit 位置位 1 的速度越快,且布隆过滤器的效率越低;3.腾讯不存在位图中,通过三个哈希函数可以计算到三个位置并且这三个位置都被百度,字节,网易中的一个所占有,产生了误判!给一个超过100G大小的log file , log中存ip,设计算法找到出现次数最多的IP,转化为找topk ip问题。给40亿个不重复的无符号整数,没有排过序。

2024-04-03 19:18:47 1383 2

原创 [C++]20:unorderedset和unorderedmap结构和封装。

4.扩容+数值拷贝:每插入一个值都需要计算负载因子 = 当前插入的数据量/可以插入的size 当这个差值>=0.7就需要进行扩容,新建一个newhashtable大小为当前表的两倍,新的表使用insert插入原来哈希表数据最后交换两个哈希表的vector。2.存在重复数据->线性探测->7%10=7 ,下标7位置放置数值7,17%10=7 下标7位置有值就向后放置下标8就放置17,27%10=7下标7位置有值 下标8位置有值下标9放置,++然后取模找到可以放置值的位置结束。哈希冲突越多,效率就越低。

2024-03-20 20:20:14 1192 2

原创 [C++]20.实现红黑树。

1.分别在myset和mymap中去实现两个类并且重载operator()进行比较数据值的提取。2.在operator()定义的时候要考虑返回值的类型是否是可以进行比较的数值。3.优点:通过一个模板参数可以实例化两份不同的树,不需要自己手写。

2024-03-14 09:08:55 1193 4

原创 [C++]19:实现AVL树

1,在正常的二叉搜索树中存在插入数据按照二叉搜索树的规则为单枝的情况。2.假设插入了N个数据在二叉搜索树中这N个数据都是在一个单枝上面。3.进行find操作找道一个数据从正常搜索树的高度次变成了N次。2.左右子树的高度差不超过1,当前树就是一个二叉搜索树。2.平衡因子的值默认为:右子树高度减左子树高度。1.平衡因子记录当前节点的左右子树的高度差值。为什么考虑加入一个当前节点的父节点呢?2.考虑在节点中加一个父节点的指针。1.验证树是否为二叉搜索树。

2024-03-08 11:01:32 359 2

原创 [C++]18:set和map的使用

3.set和map的底层结构(平衡搜索树或者红黑树)删除数据存在的情况:删除的数据不存在的情况:情况一:存在就删除。情况二:不存在就不删除,不会产生越界的问题情况三:范围删除进行测试:

2024-02-25 18:59:44 944 1

原创 Linux基础 7:自定义shell的编写

1.命令行提示符由哪几部分组成?[用户名@主机名 文件路径]$2.通过getenv函数获取环境变量内容返回对应字符串。3.变量保存字符串然后打印。else。

2024-02-24 17:26:42 920 1

原创 [C++]17:二叉树进阶

2.删除有一个孩子的节点:一个孩子节点被删除我们需要拜托删除节点的父节点连接删除节点的子节点,我们需要去判断被删除的节点的孩子在删除节点的左还是删除节点的右。4.注意一个问题:进行连接的时候是需要前面一个节点的遍历找到nullptr说明这个空可以被插入,需要判断大小需要再一次判断,判断空需要再一次判断。5.查找的值比当前节点的值小,查找的值比当前节点的值大,查找的值和当前的值相等(说明找到节点)。1.删除叶子节点:叶子节点无牵无挂,只需要让前面一个节点,指向这个节点的方向指向空就可以了。

2024-02-13 19:47:29 1522 3

原创 [C++]16:多态

同一个行为不同类型的对象去做会产生不同的结果比如下面的例子:正常人座公交车投币和刷卡,学生会刷学生卡,老人刷老年卡----->同一个买票乘车的行为–>不同对象(学生or普通人or老人)—>不同结果(滴 学生卡 / 投币 or 刷卡 / 滴 老年卡)1,重载:两个函数在同一个作用域 && 函数名相同参数不同。2.重写:2-1:两个函数分别在父类和子类中。2-2:三同(协变除外)2-3:两个函数必须是虚函数。3.隐藏(重定义)3-1:两个函数分别在父类和子类中。3-2:函数名相同。

2024-02-07 08:36:01 1140

原创 [C++]:15.继承

回答:子类和父类属于不同的作用域可以有同名成员!1.在实际的情况当中不需要去定义同名的成员!2.注意函数重载和隐藏关系的不同。1.多继承是C++的缺陷,有了多继承就有菱形继承,不得不新增语法解决问题。

2024-02-04 08:58:17 904 3

原创 [C++13]:stack && queue && priority_queue 模拟实现

5.底层的容器要满足以下接口:pop_back()size()empty()back()

2024-01-27 12:21:09 767 2

原创 算法专题[递归-搜索-回溯-2-DFS]

1.模拟路径去走判断到叶子节点然后给一个参数去push_back()2.思路的函数参数是比较好的通过这样的参数可以解决很多问题。3.特殊情况判断:只有一个节点的判断!

2024-01-21 20:50:30 529 4

原创 [C++]:12:模拟实现list

2.使用clear后的状态应该满足只有一个哨兵位的头节点并且前驱指向自己后继指向自己。1._last_base类的构造通过_M_get_node方法进行节点的空间分配。1.通过上面的代码我们发现我们构造一个节点并没有通过节点的构造函数进行构造。3.开始的时候让哨兵位的头节点自己指向自己构造一个双向带头循环的一个结构。2.在list类型中提供一个方法去在插入新的节点的时候去调用。2.观察下面的链表的结构和链表的构造函数可以观察出一点细节。2.初始化一个基础的链表需要构造一个哨兵位的头节点。

2024-01-18 19:53:50 970 1

原创 [C++]:11.模拟实现vector

ps:在当前的学习阶段看源码不要一行一行去看因为水平不足所以非常多基本上是看不懂的所以不要去一行一行去看要全方面的去看有一些看不懂问题不大。3.模拟实现insert和erase —> insert返回插入新的元素的迭代器,erase返回删除元素的下一个元素的迭代器。1.在vs下insert和erase传进去的迭代器在使用之后就不可以继续使用了(有可能发生迭代器失效的情况)。4.综上所述第三个方法最方便:我们都可以在定义的时候去初始化非常的方便。3.find()的返回值是一个iterator。

2024-01-16 11:46:19 965 1

原创 算法专题[递归-搜索-回溯-1]

【代码】算法专题[递归-搜索-回溯-1]

2024-01-08 11:41:14 765 6

原创 算法专题六:模拟

【代码】算法专题六:模拟。

2024-01-05 14:42:12 667 4

原创 算法专题五:位运算

位1的个数public:i<32;//按位与& 有0就是0//按位或| 有1就是1//按位异或^ 相同为0相异为1。

2024-01-01 14:38:33 1138 6

原创 [C++] : 贪心算法专题(第一部分)

【代码】[C++] : 贪心算法专题(第一部分)

2023-12-30 13:20:48 910 4

原创 算法专题四:前缀和

4.遍历r-l+1次进行一个范围求和然后输出。3.使用一个循环获取q次需要查询范围的数据。4.使用一个循环获取q次需要查询范围的数据。1.输入数组长度n和查询次数q。1.输入数组长度n和查询次数q。2.使用一个一维数组保存数据。2.使用一个一维数组保存数据。3.构建一个前缀和的一个数组。5.时间复杂度:O(n^2)6.通过不了所有的测试用例。5.时间复杂度:O(n^2)6.通过不了所有的测试用例。

2023-12-28 22:42:21 1232 3

原创 算法专题三:二分算法

二分查找一.在排序数组中第一个和最后一个数:1.思路一:GIF题目解析X的平方根GIF题目解析搜索插入位置GIF题目解析山脉数组的峰顶索引GIF题目解析寻找峰值GIF题目解析寻找旋转排序数组中的最小值GIF题目解析点名GIF题目解析

2023-12-21 12:26:32 681 5

原创 算法专题二:滑动窗口

1.我们有注意到一个问题在比较相等确定left可不可以push的时候去优化一下26次循环比较的过程。2.可以给一个变量去控制数量的变化。

2023-12-18 22:22:44 1561 3

原创 [C++]:10.vector使用

2.insert 在postion位置之前插入一个数据因为插入数据需要把后面的数据向会移动。3.erase是删除postion位置的数据并且后面的数据需要向前面覆盖。2.使用迭代器进行初始化构造的时候一定是一个已经实例化好的对象的迭代器。2.因为输入的数字字符串是有长度限制的所以暴力的方法就是。3.从输入数字字符串长度为2到4进行多次的循环遍历数据。1.使用和string中的[] 和at的使用是相同的!2-1:数据不同:it_1++ it_2++1.在vs下容量的扩容是1.5倍的进行扩容。

2023-12-10 16:23:58 226 2

原创 linux基础6:程序地址空间+进程控制:

1.命令行参数中的字符串地址都比较高,下标从0到n一直在增加!2.main函数地址是最底的!3.初始化数据地址比main函数要高没有未初始化数据的地址高!4.堆区是向上增长的!地址比未初始化数据要高!5.栈区是向下增长整体比堆区要高!

2023-12-09 12:51:39 119 3

原创 算法专题一:双指针

2.双for的i和j price[i]+price[j] == target。5.时间复杂度就是O(3*N^3)思路二:排序+双指针。思路二:排序+双指针。

2023-12-09 11:25:57 320 2

原创 linux基础五:linux 系统(进程状态+进程优先级+调度和切换+环境变量)

2.说一个故事:在外面的内存中有一个进程正在跑这个进程主要干把一个数据写入磁盘的命令给到磁盘,磁盘就开始写数据到对应的位置,磁盘一直在写数据,然后这个时候内存中的进程就比较轻松在等待磁盘写入是否成功(条件一)的一个信息,操作系统的内存吃紧(条件二:)操作系统就会开始进行换入换出操作,当换入和换出比较更加紧张的时候就会进行进程的删除。4.为什么需要优先级(进程排队的方式),举一个例子如果学校的食堂的窗口比学校的所有人都要多基本上是不需要进行排队的!3.跑一个进程:这个进程(数据+代码))就由寄存器保存。

2023-12-01 20:09:09 351 2

原创 [C++]:9: string类的模拟实现

4.使用全局函数模板生成的一个string。

2023-11-28 16:28:31 128

原创 linux基础5:linux系统(冯诺依曼体系结构+os管理+进程状态1)

常见的输入设备:磁盘 ,键盘,鼠标,摄像头,麦克风,声卡,网卡,数位板。常见的输出设备:显示器,声卡,网卡,打印机。输入+输出:声卡,网卡。cpu的功能:进行运算操作+控制cpu的信息流动。存储器就是我们的内存:所以的设备都只能和内存打交道。通过上面的介绍:对于底层硬件的管理就是1.操作系统(驱动管理)----------->校长。2.硬件驱动-------->辅导员3.硬件本身-------->学生4.总结:对于硬件的管理本质上就是一个先描述再组织的过程。

2023-11-24 13:07:56 251

原创 linux基础:4:gdb的使用

4.release 模式是给用户使用的没有调试信息,程序的大小是比dubug模式生成的程序要小,比较方便用户的下载和使用。3.gdb具有记录性回去记录上一次的命令直接输入回车就是上一次的执行的命令再一次执行。命令:finish 作用:从当前位置开始连续执行到当前函数结束:注意程序是一步一步执行如果存在死循环是出不去的!3.dubug模式是给程序员使用的用来观察错误和解决错误的一个方法,程序的本身比较大的。1-1:命令: list + 函数/ l + 函数(缩写):显示函数源代码。

2023-11-20 09:18:00 176

原创 [C++]:8.C++ STL引入+string(介绍)

是C++ 标准库(还包括有IO库:智能指针库:)的重要组成部分,不仅仅是一个可以复用的组件库,而且还是一个包含数据结构与算法的软件框架。Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。(如果你写了一个库是基于STL的内容进行的修改那么这个库需要进行开源)……HP 版本–所有STL实现。

2023-11-16 11:18:54 567 8

原创 [C++ ]:7.内存管理+模板引入。

1.单个开空间2.3.多个开空间和多个销毁new和delete malloc和free 没有区别的,可以不用考虑new和delete不对应的情况!因为自定义类型不需要考虑调用多少次析构函数这个问题!2-1.对于自定义类型操作:new和delete malloc和free 有区别的,需要考虑new和delete不对应的情况?观察一下栈类空间开的大小?

2023-11-11 13:47:19 164 3

原创 linux基础:3.linux基础环境开发工具和配置。

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.

2023-11-08 16:57:35 176 1

原创 [C++ 中]:6.类和对象下(static成员 + explicit +友元函数 + 内部类 + 编译器优化)

1.我们首先想到的方法是定义一个全局的变量去记录创建类对象的个数,我们定义一个count去在对象构造的时候进行++。2.经过下面的图片可以看到在全局count被多次定义所以我们可以通过命名空间把count这个全局给封装一下!静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问静态成员函数没有隐藏的this指针,不能访问任何非静态成员。

2023-11-04 10:45:06 174 4

原创 [C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

其他的运算符一般是实现在成员函数中,但是流插入和流提取操作符是实现在全局的。1.因为存在隐含的参数(影响了操作符的顺序)。1-1:写在全局改变了函数传参的顺序并且满足了正常的cout的使用顺序!2.写到全局访问不到私有的问题?2-1:友元解决!我们通过初始化列表就可以自己搞定初始化一个队列!通过初始化列表自己去调用对应的构造函数去完成我们想要多大的栈就可以初始化多大的栈!80%----100% 使用初始化列表:0%-20% 进行初始化列表+构造函数的混和使用!

2023-11-02 12:50:49 185 2

原创 Linux基础:2:shell外壳+文件权限

2.我们在这个tmp目录下使用两个用户创建了两个目录,我们用其中一个用户去删除另一个用户的文件我们发现是可以删除的因为一个文件可不可以删除是看这个文件的所在的位置而不是这个文件是谁的!关于shell 就是把用户输入的命令通过他的解释给核心,核心接收信息进行相关的操作,然后通过sheel把结果翻译并且展示出来:(两个外壳本质是一样的)2.关于用户自定义的指令:shell不知道这个命令的正确性质,不会自己去执行指令,而是会去创建一个新的进程去执行这个命令。原因就是创建文件或目录的时候还要受到。

2023-10-26 08:58:19 133 3

原创 [C++ ]:4.类和对象中(拷贝构造+赋值运算符重载)

这是我们实现的一个队列我们没有去显示的去定义这个队列的拷贝构造,但是因为,队列这个类是由已经显示定义好的一个栈和一个内置类型int组成我们去调用默认拷贝的时候就回去调用到栈的拷贝构造和内置类型的值拷贝了!1.内置类型成员完成值拷贝:2.自定义类型成员调用自己的拷贝构造:3.总结:拷贝构造函数典型调用使用已存在对象创建新对象函数参数类型为类类型对象函数返回值类型为类类型对象1.我们知道内置类型的加等的返回值是它加等之后的值,并且它本身也会被改。2.我们知道内置类型的加返回值是它加之后的值,

2023-10-24 17:24:59 87 2

原创 [C++]3.类和对象中(this指针补充)+ 类和对象中构造函数和析构函数。

1.this 的作为成员函数的形参的时候满足类的类型 * const this满足这样一个情况,说明this指针是不可以被修改的。2.只能在成员函数的内部去使用,3.this指针本质上是成员函数的一个隐藏的形参,通过外面的实参传给形参。实参其实是对象的地址。对象本身不回去存贮this。4.this指针是成员函数的第一个隐藏的指针形参,通过ecx寄存器把地址值传过去的不需要程序员进行处理。5.this指针在成员函数中是可以去使用的。

2023-10-21 12:11:29 376

原创 [C++]:2初识C++(auto) + 类和对象上:

this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。只能在“成员函数”的内部使用this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。

2023-10-19 13:04:51 229 1

原创 [C++]:1.初识C++和C语言缺陷补充。

/函数定义://1.初始化:assert(st1!= NULL);exit(-1);//2.插入数据:exit(-1);st1->top++;//3.数据遍历:assert(st1!= NULL);i++)//4.栈销毁??????????????????????????????????????????StData* st;int top;}sk;//函数声明://1.初始化://2.插入数据://3.数据遍历://4.栈销毁。

2023-10-16 12:03:54 271 3

空空如也

空空如也

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

TA关注的人

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