- 博客(22)
- 收藏
- 关注
原创 Linux进程概念系列(详细万字解读!!!!)
当一个进程结束的时候,操作系统不会立刻释放其PCB的内存占用,而是保留下来,等着父进程或者bash回收结束信息,若是结束信息始终无法被回收,那么进程的一些相关数据会一直保留再内存当中。举个例子,公司里最上层的管理者想要管理员工,实际上是不需要与员工见面的,上层的管理者只需要知道一个员工的属性,如出勤,项目贡献,活动参与度等等数据。例如,某一进程要求对磁盘进行写入操作,那么在磁盘进行写入期间,该进程就处于深度睡眠状态,是不会被杀掉的,因为该进程需要等待磁盘的回复(是否写入成功)以做出相应的应答。
2024-09-02 15:20:16 1037 7
原创 [算法刷题积累] 两数之和以及进阶引用
哈希表通过记录来某一键值是否存在,如果存在则可进一步访问pair中的second类型变量,通过这一系列的组合,就可以用哈希表简化大部分问题。这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现,也可以根据题目,用数组去模拟哈希表,两种方式选择合适的就好。两数之和很经典,通常对于首先想到的就是暴力的求解,当然这没有问题,但是我们如果想要追求更优秀算法,就需要去实现更加简便的复杂度。key指代出现的数据对24取模后的值,value代表数据对24取模之后出现key的次数。
2024-06-18 23:24:36 388
原创 [算法刷题—二分法]寻找插入位置
本道题本身并不是很难,主要是学习和分析二分查找插入位置的方法。使用二分法的前提是一定要能够使得原来的数据具有二分性。2.待插入位置不在数组中。1.待插入位置在数组中。
2024-06-15 20:49:29 359
原创 [c++刷题]贪心算法.N01
首先通过经验分析,要用最少的减半次数,使得数组总和减少至一半以上,那么第一反应就是每次都挑数组中最大的数据去减半,这样可以是每次数组总和值减少程度最大化。代码思路:利用大根堆去找数据中的最大值,每次减半再次压入大根堆即可。圆圈代表每次减半的数,圆圈的个数就代表总操作次数。我们使用《交换论证法》来证明。
2024-06-13 12:45:22 451
原创 算法刷题【二分法】
是左端点了,也有可能不是左端点,所以相等的情况就要和大于的情况合并起来操作,执行。所以在用二分法寻找左侧端点的时候,应该要使用mid的第一种取法(的时候,mid的右边包括自身都比target的值要大,执行。的时候,由于可能此时的mid已经是左端端点了。的情况下相同,但是在偶数的情况下就会有所不同。,那么此时mid的左边包括自身的值都小于。因为此时和等于合并起来了,判断条件变成是。在等于的情况下,可能成为左端的端点。会取到中间两个数的片左边的那一个,会取到中间两个数的偏右边那一个。有以上两种取法,前后者在。
2024-06-09 16:17:38 633
原创 [c++]菱形继承解析
*有同学可能会问,为什么使用虚拟继承之后,对象内占用的空间变多了?这时候有小伙伴就会问了,那编译器怎么取访问_a呢?而且75c和764(75c到_a(所继承A的首个成员地址)的地址770之间差了20 (为了处理这种情况,祖先就开发并使用了虚继承。的都可以叫菱形继承。)存放的又是什么呢?
2024-04-27 18:13:17 1164 7
原创 [C++/STL]模板进阶
这样就不用在链接的时候去其他obj找地址(即不需要链接),.h被展开后在同一个源文件里,在编译时就成功实例化=>就可以匹配好地址然后调用。2.显示实例化,但是不常用。【优点】1.模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2.增强了代码的灵活性【缺陷】1.模板会导致代码膨胀问题,也会导致编译时间变长2.出现模板编译错误时,错误信息非常凌乱,不易定位错误(出现时建议看首行的报错)
2024-04-22 22:54:58 540 3
原创 [STL]反向迭代器分析
通常我们知道使用正向的迭代器,也可以自己实现模拟出正向的迭代器;那么反向的迭代器真的就只是把正向迭代器反过来吗?本章我们来详细的解析一些细节的点。
2024-04-20 22:22:22 717 7
原创 [STL]优先级队列的模拟实现(堆)
ls(a,b)模拟函数名加传参的操作,但实际上是一个对象调用了运算符函数。所以我们再利用模板就可以实现对优先级队列中优先级进行随时的更改(以上就是优先级队列实现的重点,掌握之后就能轻松实现了,小伙伴们学会了吗?如有不妥的地方,请小伙伴们指正哦~,下次再见。的重要思想和实现操作来帮助我们实现大堆和小堆的转换。因此,最终呈现的优先级队列模拟的代码也要因此修改:(基础矿建:(这里我们同样采用适配器的写法)其实质上是利用类对( )操作符的重载。主要是修改两个重要调整算法里面的比较。,也就是模拟函数的使用。
2024-04-20 17:02:59 428 9
原创 [c++系列]c++中的动态内存管理
c++的创始人为了解决一些自定义类型创建时候的初始化等问题,开创了new/delete新的操作符,所以下面我们主要围绕这两位新角色来展开。首先我们得知道,有哪些内存的区域:
2024-04-02 13:00:19 1048 3
原创 [STL]vector底层模拟实现的双层深拷贝细节剖析
这是一种原始形式的拷贝函数的写法:当遇到内置类型的函数时候是一点毛病没有,但是如果遇到自定类型,就会出现下面的情况。运用赋值的时候,会自动调用自定义类型的赋值成员函数,即对成员完成深拷贝操作。注意:使用赋值去完成拷贝,应该先保证此种自定义类型自身已经重载了赋值操作,如果仅仅依靠编译器默认生成的赋值函数,不足以完成深拷贝的目的。:在模拟实现的时候,拷贝构造和扩容如果都使用了mempy。的,特别是自定义类型中出现指针等,容易造成浅拷贝的问题。所以在vector模板T为。的时候,不会出现问题。
2024-04-01 23:19:38 445 3
原创 用栈实现有效括号
1.字符串中一开始就出现了右边括号(如 { [ ( ... ),并且栈中没有元素,即为。一旦遇到左边括号,我们就将其储存再栈里,后边一旦遇到右边符号,我们就拿出栈顶的元素(由于是用c语言解题,所以我们需要自己写对应与栈基本操作有关的代码。最后我们将代码整合起来就完成了,这里我附上最后的代码。如栈的初始化,插入,销毁,返回栈顶元素,判空操作等等。第二种类型:(范围注释表明不是此类型的对应代码))与之对比,看是否为对应符合要求的括号。3.右边符号不足,如{ [ ( ) ]。二:然后我们对应每种情况写代码。
2024-02-03 23:20:45 282 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人