- 博客(22)
- 收藏
- 关注
原创 Linux 多线程(一)
线程一和线程二都需要申请到锁1和锁2,当线程一先申请到了锁1,线程二申请到锁2,当线程一要去申请锁2,此时线程二还未释放锁2,所以线程一申请不到锁2,线程一被挂起等待,当线程二要去申请锁1,此时的线程1还未释放锁1并且线程1被挂起,所以线程二则永远申请不到锁1,也被挂起等待,最终线程一和线程二都申请不到对方的锁,都被挂起等待,这就是死锁。,因为加锁需要申请锁,和释放锁的过程,并且加锁之后,临界资源一次只能有一个线程进行运行,因此,加锁的区域破坏了多线程并发的过程,所以建议在编码的时候,
2024-10-30 17:10:00 829
原创 C/C++动态内存管理
int main()//new/delete 与malloc/free除了开辟空间,最大的区别会调用调用自定义类型的构造函数和析构函数,自动推导类型返回free(p1);delete p2;//内置类型free(p3);delete p4;//自定义类型数组free(p5);delete[]p6;return 0;
2024-10-17 00:00:00 768
原创 模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。
2024-10-11 00:00:00 933
原创 模板初阶
class 类模板名//类内成员动态顺序表的模板//Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:,_size(0){}//...~Vector();//演示在模板在类内声明,类外定义private:T* _dData;template<class T>//模板在类外面定义一定要加模板参数列表_size = 0;3.2 类模板的实例化类模板实例化与函数模板实例化不同,
2024-10-02 12:00:00 539
原创 多态初识&&原理刨析
2.1多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。
2024-09-26 20:50:19 813
原创 继承初识/虚拟继承原理刨析
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用
2024-09-20 21:43:39 733
原创 AVL树的insert和验证
如果在一棵原本是平衡的AVL树中插入一个新节点,可能造成不平衡,此时必须调整树的结构, 使之平衡化。AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL树也可以看成是二叉搜索树。2. pParent的平衡因子为-2,说明pParent的左子树高,设pParent的左子树的根为pSubL。1. pParent的平衡因子为2,说明pParent的右子树高,设pParent的右子树的根为pSubR。假如以pParent为根的子树不平衡,即pParent的平衡因子为2或者-2,分以下情况考虑。
2023-12-22 01:00:00 66
原创 关联式容器的使用功能相关详解
1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。
2023-12-16 20:16:31 115 1
原创 多态的常见面试题
概念:在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口 类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。4.1虚函数表class Carpublic:public:cout << "Benz-舒适" << endl;public:cout << "BMW-操控" << endl;
2023-11-18 21:14:40 128 1
原创 二叉搜索树
通过英文可以快速找到与其对应的中文,英 文单词与其对应的中文就构成一种键值对;a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树。b、最多查找高度次,走到到空,还没找到,这个值不存在。b. 树不空,按二叉搜索树性质查找插入位置,插入新节点。1.若它的左子树不为空,则左子树上所有节点的值都。2.若它的右子树不为空,则右子树上所有节点的值都。
2023-11-12 18:42:21 46
原创 详解gdb
首先我们先搞清楚gdb是一个工具,一个调试的工具。break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点。print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。info(或i) breakpoints:参看当前设置了哪些断点。display 变量名:跟踪查看一个变量,每次停下来都显示它的值。delete breakpoints n:删除序号为n的断点。undisplay:取消对先前设置的那些变量的跟踪。上面是一些gdb的一些命令,为了防止不会进入的人。
2023-10-07 20:11:26 88 1
原创 优先级队列的详解
1.适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),该种模式是将一个类的接口转换成客户希望的另外一个接口。简单来说插头就是适配器的一种。
2023-10-06 21:09:12 101 1
原创 vector使用和实现(不是创建一个更好的而是看看它的原理)
1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2023-09-11 21:15:51 54
原创 迭代器两种失效问题
这是因为我们一开始给的空间为4,当插入的数据大于4,就回发生扩容,导致了,迭代器pos指向了随机值。这就是insert内部,迭代器失效的原因。因为当你删到偶数是pos的位置将由下一个数取代,而你还要++it,将it加到了pos的下下的位置的数,这就是出现这三种情况的原因。1.现在我们来看看,vector提供的insert函数中内部的失效的具体原因。这是当调试到103行时,pos的值还是1,没问题。当需要扩容时,我们更新一下,迭代器pos就可以了。当我们有这样的需求,把下列三组数据的所有偶数都删除。
2023-09-08 21:31:53 84 1
原创 linux中的权限
前三个rwx是拥有者自己的权限,中间三个rwx所属组的权限,后三个是other的权限。w:如果是目录代表是否有权限去修改该目录下所有文件(包括删除和创建),如果是普通文件代表是否有权限修改该文本的内容。r:如果是目录代表是否有权限去查看该目录下所有文件的属性,如果的普通文本文件代表是否有权限去查看文本文件的内容。在linux中主要分为两种用户:一种是超级用户,一种是普通用户,而权限主要限制的是普通用户的一些操作。x:如果是目录代表是否有权限进入该目录,如果是一个可执行程序,则代表是否有权限执行。
2023-09-06 21:32:22 48 1
原创 位段有关知识详解
首先我们先创建int类型的空间,也就是说先创建4个字节(32byte),如果用完了这32个byte位,我们再向内存申请一个int类型的空间。当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃还是利用,这是不确定的。总结:跟结构体相比,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台问题存在。冒号后面的数字单位是byte,意思是向创建的32个byte要2个byte,其它的类似。上面是我们假设的结果,那么我们来看看VS的编译器是不是这样求的呢。
2023-03-23 19:31:38 66
原创 字符函数和字符串函数
注意:1、字符串要以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包含‘\0’)。注意:这个模拟实现,追加两个不同字符串的时候是可行的,不过当你自己给自己追加的时候,就会无限循环下去。注意:1、第一的字符串大于第二个字符串,则返回大于0的数字(在VS中返回1,其他编译器不一定)3、第一个字符串小于第二个字符串,则返回小于0的数字(在VS中返回-1)2、目标空间必须有足够的大,能容纳下源字符串的内容。注意:目标空间的必须足够大,这是写代码的我们必须知道的。
2023-03-19 21:43:16 65
原创 初阶结构体
结构体的声明结构体的初始化结构体的访问结构体的传参前言:这里只是简单的认识一下结构体,不做过多的深入探讨,后期我会继续更新,不过起码能让你学会结构体是怎么用的。
2023-03-09 17:36:30 43
原创 数据在内存中的储存
C语言中规定,signed int可省略signed,直接写成int,short和long有类似的规定,但值得一提的是,C语言中并没有规定char等价于signed char,二者相不相等取决于具体的编译器,但是绝大多数编译器都把char视为signed char。但是a,b,c是char类型,只能存放一个字节,所以会发生截断,高位的三个字节数据就会弃掉,a,b,c实际存放的都是。那么,S=1,M=1.01,E=2。对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。
2023-02-24 14:36:53 56
原创 C语言扫雷
玩家在排雷时,看到的是show数组的内容,‘*’表示非雷,数字表示周边雷的个数,show数组初始化是全部放置‘*’。特点:与其他循环语句不同的是,do......while循环的执行次数1~n,也就是说该循环至少执行一次。(1)、1表示玩游戏,0表示退出游戏,如果玩家输入错误,屏幕就会打印”输入错误,请重新输入“在mine数组中,’0‘,表示非雷,’1‘表示雷。打印”排查雷,请输入坐标“,后用键盘输入数字+空格+数字,分别代表x轴和y轴。如果输入的数字不在数组的范围里,就打印”输入坐标非法,请重新输入“。
2023-02-09 13:33:50 114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人