- 博客(84)
- 收藏
- 关注
原创 线程互斥,线程安全和线程同步
1.创建线程pthread_create()2.终止线程的三种方法。线程取消pthread_cancel(一般在主线程取消), 线程终止pthread_exit(在其他线程执行), 或者使用线程返回return3.线程等待pthread_join需要等待的原因是1.已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。2.创建新的线程不会复用刚才退出线程的地址空间。
2024-04-18 22:45:15
771
原创 LWP等理解
线程互斥指的是在多个线程间对临界资源进行争抢访问时有可能会造成数据二义,因此通过保证同一时间只有一个线程能够访问临界资源的方式实现线程对临界资源的访问安全性。
2024-04-16 23:46:59
725
原创 进程控制——Linux
概念:让子进程执行新的程序原理:1.将磁盘中的程序,加载到内存结构中2.重新建立页表映射,设执行程序替换,就重新建立谁的映射,结果:让我们父子进程彻底分离,并让子进程执行一个全新的程序。
2024-04-11 19:58:40
976
原创 set和map
返回的pair的first是一个迭代器iterator,要么是新插入的元素,要么是没插入成功(防止冗余),返回的是与之相等的元素的位置。insert的返回值的pair 和 库里面结构的pair不一样,这个要区分开来。情况一,假如k在map的对象中,插入失败,这里充当查找k对应的v,修改k对应的v。erase删除返回的被删除数据的个数。value_type就是pair,也就是存的是一对数据,是一个结构。不会,因为迭代器和链表一样,每个结点都是独立的。不管要找的那个值存在不存在,则返回比它大的那个值的迭代器。
2024-04-11 19:02:18
1268
原创 多态——C++
继承的概念和定义,基类和派生类对象赋值转换,这点可以去学学。一般子类继承级就用公有继承。继承中的作用域就了解一下就OK。虚拟继承半了解就行。我们自己设计尽量不要用菱形继承。但是可以用多继承。怎么让不同的对象调用不同的函数,这里涉及到对象赋值转换,切割。//普通票public:cout << "买票——全价" << endl;//学生票 继承普通人public:cout << "买票——半价" << endl;
2024-04-11 17:17:22
1195
原创 模拟实现队列
好的习惯是,每一次delete后记得把指针设置为nullptr,不让他成为野指针。释放节点的思路:服用pop函数先释放每一个链表节点,最后释放虚拟头结点。队头指针_front不变,管理出队,队尾指针迭代管理入队。1.使用的是链式结构的队列。实现思路,队头队尾指针指向同一个虚拟头结点。2.设置队头指针,和队尾指针。
2024-03-27 14:52:50
289
原创 模拟实现栈
3. push入栈问题,扩容需要把旧空间的元素 重新 拷贝到新的地址空间。但是malloc后面有realloc,就省下了这些步骤。1.栈的初始化,这里是用new还是malloc。初始化记得分配空间,和容量。2. 边界问题,出栈记得判断是否越界。
2024-03-23 07:15:00
276
原创 手撕双向循环链表
1.对这个头节点的设计,prev和next都要指向头。环境:Linux的gcc环境,gdb。display 变量名 设置变量。s 逐步进行(进入函数内部)2.对于gdb的调试。l 行号 显示代码。
2024-03-22 17:13:41
178
原创 手撕单链表
假如没有用dummy虚拟指针,还要注意二级指针问题,比如头插头删,或者销毁链表,涉及到改变头结点的指针自身要改变的问题。单链表的复习,根据接口手撕单链表,删除节点注意判空。创建一个虚拟头结点dummy会更好操作一些。
2024-03-21 21:52:37
156
原创 链表练习2
注意链表的每个结点连接上去的末尾要设置为NULL,因为末尾不一定是NULL。1.可以不使用多次循环,一次就够了,能直接连接就直接连接。
2024-03-18 23:26:55
221
原创 链表练习1
总体思路就是需要设置虚拟头节点。1.删完节点记得释放内存。2.遍历的条件需要时cur->next, 因为cur只是一个虚拟节点。3.dummyHead指向原链表。确保返回头节点。cur负责移动删除链表结点。
2024-03-18 23:26:24
260
原创 时间复杂度1+空间复杂度
0和n+1个数异或,n+1个数还是原来的样子,主要是要和2n+1的数再次异或,(相同为0,相异为1,0异或0还是0)得到缺失的数字。
2024-03-18 23:25:45
236
原创 widget一些控件的使用
通过设置定时器timer,绑定updatetime的自定义槽函数,来实现倒计时。给QLabel关联一个 伙伴, 这样点击QLabel就能激活对应的伙伴。此处把 label 中的⽂本设置为 “快捷键 &A” 这样的形式.• toggled 是 checked 属性改变时触发的.Qt::AutoText 根据⽂本内容⾃动决定⽂本格式.可以通过 alt + A 的⽅式来触发该快捷键。• released 是⿏标释放触发的.和上面的lcdnumber的接口差不多。• pressed 是⿏标按下触发的.
2024-03-17 20:51:44
571
原创 lambda+QWidget的属性
后续如果我们对应的槽函数比较简单,而且是一次性使用的,就经常会写这种lambda的形式。另外需要确定捕获到的变量是有意义的。确保无论何时用户点击了按钮,捕获到的变量都能正常使用。btn变量是new出来的,生命周期跟随整个窗口,(挂在了对象树上,窗口关闭才释放)this指针是Widget w实在main函数中定义的,随着进程结束才释放的。一般都是按照 [=] 值的方式来捕获各种变量。但是也可以用 [&] 引用来捕获,但是需要关注引用的变量本身的生命周期。
2024-03-15 15:50:07
636
原创 信号和槽1
开发当中大部分情况都是需要自定义槽函数的。实际上和自己自定义成员函数没什么区别。但是在以前的Qt版本中,必须将槽函数放到public slots中。qmake使用元编程技术,构建Qt项目的时候,使用qmake会自动扫描关键字,比如slots从而,生成一些qt的代码。btn->setText("按钮");delete ui;this->setWindowTitle("按钮已经按下了");private:qt生成的函数形同。
2024-03-13 21:44:54
593
原创 Qt对象树
这个代码在new了之后没有释放,不会造成内存泄漏。原因是这个对象是挂到了对象树上。qt就是设计了一个n叉树,将各种元素组织起来了。例如以下图通过树形结构,就把界面上显示的这些控件对象都组织起来了。使用对象树,把这些内容组织起来,在窗口关闭的时候释放。所以,通过new的方式创建对象,也就是把这个对象的生命周期,交给Qt的对象树来统一管理。假如在栈上创建的话,生命周期会随着构造函数的结束,就释放掉。
2024-03-12 19:02:44
936
原创 Qt环境搭建+简单程序实现
Qt是一个跨平台的C++图形用户界面应用程序框架。框架的本质就是一群大佬发明的让菜鸡写出来的代码也也比较规范也就是限制程序员的自由,让程序员写出来的代码规范。库和框架有相似性。库是被程序员调用的,(程序员是主体),由程序员填充一些框架。Qt是跨平台的,支持Linux,windwos,Mac,嵌入式系统Linux中主要是KDE桌面是Qt构建的。
2024-02-04 21:06:53
1239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人