- 博客(109)
- 收藏
- 关注
原创 【Linux庖丁解牛】—gcc/g++&make/Makefile!
在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数,但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。它的主要功能是确定文件的类型。上面说到过make的好处就是让我们的工程编译更加的方便,但是到目前为止,我们并没有看到make命令让我们的编译更加方便,甚至还更加复杂了。
2024-12-16 21:36:57
1247
12
原创 【优选算法】——分治-快速&归并排序!
交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。你需要返回给定数组中的重要翻转对的数量。请注意,你需要找的是数组排序后的第。,返回其中存在的「交易逆序对」总数。的情况下解决问题,时间复杂度为。
2024-12-12 22:15:14
1999
68
原创 【优选算法】——模拟!
该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。只有 "z" 是无效的修改,因为字符串 "zzs" 中有连续重复的两个 'z'。可以证明,在给定的约束条件下,答案总是存在的。- 第 2 秒,提莫再次攻击艾希,并重置中毒计时器,艾希中毒状态需要持续 2 秒,即第 2 秒和第 3 秒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。- 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。
2024-11-27 16:27:22
996
20
原创 【Linux庖丁解牛】—软件安装&vim!
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora,
2024-11-19 20:31:29
2254
77
原创 【Linux庖丁解牛】—权限!
你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提 亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash。,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)究其原因,也就是在我的目录里面的所有文件我都有删除和新建的权限(即使这个文件我不能读,不能写),因为我对于这个目录有w权限!
2024-11-17 16:04:02
2013
82
原创 【Linux庖丁解牛】—Linux基本指令(下)!
a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类 型,硬件平台类型,操作系统名称。我们之前可以使用cat指令打印日志文件中的所有内容,现在我们也可以使用管道配合grep指令过滤出我们想要的内容!如果我们想要在本地上传压缩包到云服务器,那我们就可以使用rz指令,方便的话,我们也可以直接使用拖拽的方式上传!打包可以防止文件丢失,压缩可以减少体积,节省存储空间,可以减少网络传送的时间!,其作用是在指定的文件中过滤出包含你指定字符串的内容,并按行打印出来。
2024-11-16 14:44:59
2226
79
原创 C++从入门到起飞之——开放定址法实现哈希表 全方位剖析!
我们定义一个HashTable对象,那么我们就可以复用insert逻辑进行新表和旧表的重新映射,因为在复用insert逻辑之前,我们已经进行了2倍扩容,所以insert决不会循环进入扩容逻辑,只会走插入逻辑!我们的Hash映射都是通过无符号整形来确定key在表中的位置,但是,如果外层的key类型并不是无符号整形如string,浮点数,甚至是负数时,上面代码的逻辑就有大问题了!C++标准中设计了一个获取素数的函数,扩容时,我们只需要将当前表的大小传给这个函数,我们就能获取到接近2倍的素数!
2024-11-06 12:43:59
1496
39
原创 【优选算法】——前缀和!
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0。请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,接下来q行,每行4个整数x1, y1, x2, y2,分别代表这次查询的参数。接下来有q次查询, 每次查询有两个参数l, r.
2024-11-04 17:18:08
930
75
原创 【优选算法】——二分查找!
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:nums = [[3,4]示例 2:nums = [[-1,-1]示例 3:[-1,-1]public://处理边界情况//求左端点while(left
2024-10-31 08:41:36
1942
60
原创 C++从入门到起飞之——红黑树封装map和set 全方位剖析!
我们在使用[]时,如果map中有和我们外面传递的key相同的key,那insert就会插入失败并且返回这个key的迭代器。map和set迭代器的实现其实思路与list迭代器的实现几乎一样,它们都是由一个一个的节点组成的。如果当前节点的右为空,则说明当前节点的中序已近完毕,如果当前节点是父亲的右,说明父亲的中序也完毕,所以我们要找到祖先节点中是父亲的左的那个节点,那++后的节点就是就是父亲。无论是set还是map的查找都是根据key来进行的,所以我们的红黑树类模版的第一个参数类型是接受上层传递过来的K类型。
2024-10-27 11:21:34
1475
81
原创 【优选算法】——滑动窗口(下篇)!
它是 words 中以 ["the","foo","bar"] 顺序排列的连接。它是 words 中以 ["foo","bar","the"] 顺序排列的连接。它是 words 中以 ["bar","the","foo"] 顺序排列的连接。它是 words 中以 ["bar","foo"] 顺序排列的连接。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
2024-10-25 13:25:20
2741
69
原创 【优选算法】——滑动窗口(上篇)!
3、那我们就更换固定点left,那这时候right也没有必要傻乎乎的回到固定点重新枚举。2、当我们固定一端left,用right去枚举时,当right恰好走到大于等于target的位置。这时候right其实就没有必要继续往后走了,因为后面的长度都大于此时的长度!1、我们首先想到的一定是暴力枚举所有的子数组,记录最小的长度即可解决问题。粗体数字从 0 翻转到 1,最长的子数组长度为 10。粗体数字从 0 翻转到 1,最长的子数组长度为 6。请注意,你的答案必须是。是该条件下的长度最小的子数组。
2024-10-21 22:26:06
1221
88
原创 C++从入门到起飞之——红黑树 全方位剖析!
c变成课这颗树新的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且 不需要往上更新,因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。c变成课这颗树新的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且 不需要往上更新,因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。c为红,p为红,g为⿊,u不存在或者u存在且为⿊,u不存在,则c⼀定是新增结点,u存在且为⿊,则 c⼀定不是新增,c之前是⿊⾊的,是在c的⼦树中插⼊,符合情况1,变⾊将c从⿊⾊变成红⾊,更新上 来的。,我们只需要进行变色。
2024-10-18 14:43:54
1983
73
原创 【优选算法】——双指针(下篇)!
b、如果大于,count+=(right-left ),固定max和right两边后,left是right之后最小的一边。2、排序后,我们定义target在len-1的位置,left=0,right=target-1。1、 暴力解法:我们可以很轻松的想到枚举所有的三条变,判断它们是否可以组成三角形,记录有效三角形的个数即可。a.如果left==left--,那么我们找到的下一个三元组必然和前一个相等!b.同理,如果right==right+1,那么我们找到的下一个三元组必然和前一个相等!
2024-10-16 23:00:00
2684
81
原创 【优选算法】——双指针(上篇)!
常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。⼀般⽤于顺序结构中,也称左右指针。• 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼 近。• 对撞指针的终⽌条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循 环),也就是:◦ left == right (两个指针指向同⼀个位置)◦ left > right (两个指针错开)⼜称为⻳兔赛跑算法,其基本思想就是使⽤两个移动速度不同的指针在数组或链表等序列 结构上移动。
2024-10-15 19:27:56
2312
76
原创 C++从入门到起飞之——AVL树 全方位剖析!
• 更新后parent的平衡因⼦等于1或-1,更新前更新中parent的平衡因⼦变化为0->1或者0->-1,说 明更新前parent⼦树两边⼀样⾼,新增的插⼊结点后,parent所在的⼦树⼀边⾼⼀边低,parent所 在的⼦树符合平衡要求,但是⾼度增加了1,会影响arent的⽗亲结点的平衡因⼦,所以要继续向上 更新。0不是更 好的平衡吗?• 插⼊结点,会增加⾼度,所以新增结点在parent的右⼦树,parent的平衡因⼦++,新增结点在 parent的左⼦树,parent平衡因⼦--
2024-10-13 14:51:17
1648
81
原创 C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!
• set的声明如上,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是O(logN),迭代器遍历是⾛的搜索树的中序,所以是有序 的。
2024-10-10 23:16:52
2140
94
原创 【Linux庖丁解牛】—Linux基本指令(中)!
由于find具有强大的功能,所以它的选项也很 多,其中大部分选项都值得我们花时间来了解一下。当我们使用cat指令想要获取一个文件当中的内容时,如果我们不指定文件,则默认到键盘文件当中获取(读取)内容,如果我们使用(
2024-10-03 12:00:24
1970
114
原创 C++从入门到起飞之——二叉搜索树 全方位剖析!
场景1:⼩区⽆⼈值守⻋库,⼩区⻋库买了⻋位的业主⻋才能进⼩区,那么物业会把买了⻋位的业主的 ⻋牌号录⼊后台系统,⻋辆进⼊时扫描⻋牌在不在系统中,在则抬杆,不在则提⽰⾮本⼩区⻋辆,⽆ 法进⼊。场景2:商场⽆⼈值守⻋库,⼊⼝进场时扫描⻋牌,记录⻋牌和⼊场时间,出⼝离场时,扫描⻋牌,查 找⼊场时间,⽤当前时间-⼊场时间计算出停⻋时⻓,计算出停⻋费⽤,缴费后抬杆,⻋辆离场。场景2:检查⼀篇英⽂⽂章单词拼写是否正确,将词库中所有单词放⼊⼆叉搜索树,读取⽂章中的单 词,查找是否在⼆叉搜索树中,不在则波浪线标红提⽰。
2024-09-29 15:01:09
1232
86
原创 C++从入门到起飞之——多态 全方位剖析!
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。
2024-09-22 19:06:53
1857
107
原创 【Linux庖丁解牛】—Linux基本指令(上)!
命令是Linux系统管理和文件浏览中的一个强大工具,通过其提供的各种选项,你可以轻松地以图形化的方式查看和理解复杂的目录结构。我们甚至还可以将我们的code.c文件拷到usr/bin目录下,然后和文件自带的指令一样不用指定绝对路径就可以执行我们的指令!(这里特指inode change time)指的是文件的不同时间戳,它们各自代表了文件的不同方面的变化。指令是Linux系统中一个非常实用的工具,能够帮助用户快速找到命令的执行文件路径,方便执行和管理命令。命令(这在Windows的命令提示符中是常见的)。
2024-09-20 21:50:41
2024
80
原创 C++从入门到起飞之——继承下篇(万字详解) 全方位剖析!
所以,我们一定要记住,无论在什么情况下,我们都不要显示调用父类的析构函数,多次析构可能会引起程序的崩溃!5. 派⽣类对象初始化。
2024-09-16 15:18:28
1404
101
原创 C++从入门到起飞之——继承上篇 全方位剖析!
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以 既叫基类/派⽣类,也叫⽗类/⼦类)
2024-09-13 08:54:20
1587
81
原创 C++从入门到起飞之——模版进阶&分离编译 全方位剖析!
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误不过由于模版超高的优越性,这点缺陷也就显得微不足道了!
2024-09-09 11:04:41
1366
95
原创 C++从入门到起飞之——priority_queue(优先级队列) 全方位剖析!
1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素 中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶 部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的 顶部。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2024-09-07 15:21:18
2467
92
原创 C++从入门到起飞之——stack&queue&deque 全方位剖析!
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端 进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个 动态的二维数组。
2024-09-06 15:07:27
1865
82
原创 C++从入门到起飞之——list模拟实现 全方位剖析!
但是,list如果我们还是使用原生指针的话就完全做不到迭代器的效果,因为我们对节点指针*取到的是节点本身,而不是节点里面的数据,对节点++或--,因为链表不是连续的物理空间,所以我们并不能拿到前一个或后一个的迭代器反而让迭代器成了野指针!list就是我们所熟悉的数据结构链表,通过查看源码以及我们对链表的了解我们知道在类模版list中的成员变量一个是指向有效链表的哨兵卫头结点_head,另一个是记录有效元素个数的_size,而链表中的有效元素的存储地址空间不是连续的,所以并没有容量capacity的概念!
2024-08-30 21:55:06
1953
100
原创 C++从入门到起飞之——list使用 全方位剖析!
假如我们想要在list的正向迭代器后的第三位置插入一个2,在上面的这种写法就不再支持了!而我们之前在string和vector的使用时这样玩是完全没有问题的!那是为什么呢!通过查阅文档资料,我们可以发现在list下的的迭代器是bidirectional iterator(双向迭代器)那双向迭代器又是什么意思呢?下面我就和大家总结一下迭代器从功能和性质上的分类:>从功能上可分为以下四种:1、正向迭代器2、反向迭代器3、正向常量迭代器4、反向常量迭代器。
2024-08-28 21:19:27
1313
88
原创 【Linux庖丁解牛】—Linux背景介绍&环境搭建!
这个系列的文章学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说 Linux,还得从UNIX说起。
2024-08-13 10:54:39
1226
137
原创 C++从入门到起飞之——深浅拷贝&string类补充 全方位剖析!
在构造时,将资源的计数给成1,每增加一个对象使用该 资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源, 如果计数为1,说明该对象时资源的最后一个使用者,将该资源释放;如果,this的_str为随机值,那么在交换后,tmp在析构时会释放随机的空间。如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。但是,为了让效率提高,
2024-08-09 17:56:22
1386
116
原创 C++从入门到起飞之——string类的模拟实现 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C++从入门到起飞 🔖克心守己,律己则安>string.h在string.h中我们用来包含各种头文件以及定义我们的string类和非成员函数的声明!注意:在string.h中string类的定义和非成员函数的声明放到我们自己定义的命名空间my_string中(原因就是为了和库里面的std:string类进行区分!)>string.cpp在string.cpp中我们来完成string类中一些(类里面短小频繁调用的函数声明和定义不用分离)成员函
2024-08-07 13:38:29
1922
122
原创 C++从入门到起飞之——string类用法 全方位剖析!
我们先看到上面的一段代码,其中关键字auto(下文有专门针对auto的讲解,这里知道一些用法就没问题了)先定义了一个变量s,它会自动提取到字符串s2中的每一个字符并识别它的类型从而进行匹配,而范围for遍历会自动遍历字符串,并输出每一个字符。》对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。》在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、 快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。
2024-08-03 16:39:53
1869
116
原创 C++从入门到起飞之——模版初阶 全方位剖析!
class 类模板名// 类内成员定义//类模版public:_top = 0;//声明private:T* _array;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲template//必须要有前置声明if (_capacity == _top)//容量满了就扩容//更新容量//把数据拷贝到新空间//释放旧空间//让_array指向新空间//临时变量tmp出作用域后自动销毁int main()
2024-07-30 11:45:10
1258
109
原创 C++从入门到起飞之——内存管理(万字详解) 全方位剖析!
new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间 还会调用构造函数(初始化对象)和析构函数(释放资源)!class Apublic:A(int a=0):_a(a)cout
2024-07-28 20:50:38
4392
77
原创 C++从入门到起飞之——初始化列表&类型转换&static成员 全方位剖析!
如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~必须放在初始化列表位置进⾏初始 化,否则会编译报错。不在初始化列表初始化的成员也会⾛初始化列表。初始化列表出现的的先后顺序⽆ 关。相关内置类型为参数的构造函数。每个成员变量定义 初始化。没有默认构造的类类型变量。括号中的初始值或表达式。没有显⽰在初始化列表。我们下期不见不散~~
2024-07-26 10:00:44
2046
90
原创 C++从入门到起飞之——const成员函数&Date类实现 全方位剖析!
下面代码是我在实现日期类时的检测(仅供参考)这个文件中定义我们要实现的全部成员函数!⽐如我们不想让别⼈取到当 前类对象的地址。俩个对象的地址都是胡乱返回的(真的损!const取地址运算符重载。成员函数进行声明和定义分离。成员函数参数列表的后 ⾯。普通取地址运算符重载。0、检查日期是否有效。我们下期不见不散~~
2024-07-23 13:22:59
1479
83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人