- 博客(56)
- 收藏
- 关注
原创 Qt之基础体系
每个槽也可以用函数表示,称为槽函数。函数是 Qt 框架中 QString 类的一个成员函数,它提供了一种将格式化的数据插入到字符串中的方式。这个函数与 C/C++ 标准库中的 sprintf 函数在功能上类似,但 QString::sprintf 是专为 QString 设计的,因此它完全支持 Unicode 编码,可以处理各种语言的文本。功能:QVariant在Qt中被广泛用于处理不同的数据类型,支持自动类型转换,提供了类型安全的操作,支持跨线程操作,并且可以用于信号和槽、属性系统、数据模型等多种场景。
2024-07-18 19:41:09
1176
1
原创 字节跳动后端工程师实习生笔试题-c++
大致思路,要求得最大和与字符出现的位置和次数有关,对于某一字符串来说,越排在前面的字符,它所占的权值就越大,所以可以对字符串的位置设置权值,如1,10,100,1000…有时间找了一份笔试题做做,结果还是一言难尽,这些编程题的题目都需要深刻的去理解,不然忽略一小段话,一个小细节,都会让自己在电脑面前怀疑半天,刷了一些算法题,能力提升没提升不知道,反正心里承受能力是一定会提升的,行了,下面看看这份笔试题。初始集合是空的,有两种操作,要么给集合添加一个长度为 L 的木棒,要么删去集合中已经有的某个木棒。
2024-03-13 00:13:20
1023
原创 c++中的智能指针
weak_ptr 指向一个由 shared_ptr 管理的对象,但不会影响所指对象的生命周期,也就是将一个 weak_ptr 绑定到一个 shared_ptr 不会改变 shared_ptr 的引用计数。unique_ptr是C++11标准库提供的一种智能指针,它能够自动管理动态分配的内存,从而避免了内存泄漏的问题,unique_ptr是独占式的,即完全拥有它所管理对象的所有权,不和其它的对象共享,unique_ptr禁用了拷贝构造和拷贝赋值构造,仅仅实现了移动构造和移动赋值构造,这也就使得它是独占式的。
2024-01-18 02:36:37
1086
3
原创 银行家算法c++
假设在进程并发执行时进程i提出请求j类资源k个后, 表示为Requesti[j]=k,系统按下述步骤进行安全检查:1.如果Requesti≤Needi则继续以下检查, 否则显示需求申请超出最大需求值的错误。2. 如果Requesti≤Available则继续以下检查, 否则显示系统无足够资源, Pi阻塞等待。
2024-01-04 17:49:49
1961
2
原创 动态规划之完全背包问题
完全背包问题(Complete Knapsack Problem)是指给定一组物品,每种物品都有自己的重量和价值,物品数量无限。问题是如何选择物品放入背包,使得背包内物品的总重量不超过背包容量,同时尽可能获得最大的价值。它可以选择取0件、取1件、取2件……取k件,而0/1背包问题只能取0件、取1件。在完全背包问题中,物品不止有一个,也分两种,一种是不作任何限制,要多少有多少,这种称为完全背包问题,另一种是依然有个数限制,这种称为多重背包问题。
2023-11-19 20:17:46
911
12
原创 c++异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。
2023-11-19 14:35:56
231
4
原创 c++11中的线程库和包装器
此外,std::thread还提供了其他一些重要的成员函数,如detach()、swap()、std::this_thread::get_id()、std::this_thread::yield()、sleep_until()、sleep_for()等。其中,std::thread是一个重要的类,它允许我们创建新线程并控制它们的执行。:线程函数的参数是以值拷贝的方式拷贝到线程栈空间中的,因此:即使线程参数为引用类型,在线程中修改后也不能修改外部实参,因为其实际引用的是线程栈中的拷贝,而不是外部实参。
2023-11-06 01:19:56
312
23
原创 动态规划之01背包问题
最后一块石头的重量 II2.题目描述:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x
2023-10-29 01:04:09
425
8
原创 动态规划问题
那么就在s中的(0, i - 1)区间与t中的(0, j)区间中找有多少个t的子串,此时dp[i][j] = dp[i - 1][j],所以dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];,s[i] = t[j],这两个位置可以和前面的字符相结合,结合后的个数和结合前的个数是相等的,因此dp[i][j] = dp[i - 1][j - 1],二是。’ 和 ’ * ’ ,‘?输入:nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
2023-10-17 17:38:13
281
20
原创 Linux线程同步实例
其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放入了元素;当队列满时,往队列里存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程操作时会被阻塞)。实现,数组中的元素按照一定的顺序排列,并且当队列头或者队列尾指针到达数组的尾部时,会自动从数组的头部开始重新循环使用。环形队列的一个好处是,当队列满时,可以通过覆盖队列头部的元素来继续存储新的元素,这样可以使得队列在一定程度上具有循环使用的能力,节省存储空间。
2023-10-14 19:15:42
1261
21
原创 Linux线程同步
当一个线程需要等待某个条件时,它可以调用条件变量的wait()方法,这将导致该线程被阻塞,直到另一个线程调用条件变量的signal()方法或broadcast()方法来唤醒它。从上述代码可以看到,使用信号量就不需要对于临界资源进行判断,因为信号量本身就是一个计数器,是一种资源的预定机制,因为对临界资源进行判断,需要进入临界区,所以需要加锁后判断,而信号量就不需要在加锁后判断。我们用5个线程来看现象,5个线程执行自己的函数,其中线程访问临界资源,访问临界资源需要保证资源安全,所以需要加锁。
2023-10-10 16:37:22
312
8
原创 c++11的一些新特性
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法,但是如果排序的是自定义类型元素,每次为了实现一个algorithm算法,都要重新去写一个类,如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名,这些都给编程者带来了极大的不便。需要注意的是右值是不能取地址的,但是给右值取别名后,会导致右值被存储到特定位置,且可以取到该位置的地址,也就是说例如:不能取字面量10的地址,但是rr1引用后,可以对rr1取地址,也可以修改rr1。该lambda函数不能做任何事情。
2023-09-16 16:49:59
560
29
原创 动态规划之子数组系列
动态规划最核心的思想,就在于拆分子问题,记住过往,减少重复计算。dp问题需要对每种情况进行详细分析,得出状态表示,状态转移方程,而且要注意初始化,填表顺序和返回值等问题。
2023-09-10 00:36:44
1150
24
原创 linux线程互斥
若其他线程想要上锁一个已经被上锁的互斥锁,该线程就会被挂起,等到已上锁的线程释放掉互斥锁为止。这是因为在多个线程访问同一份资源的时候,如果一个线程在取值的过程中线程被切换到另一个线程,那么另一个线程也会取到这个值,然后对这个值进行操作,就会出现越界的情况。接下来用pthread_detach函数将子线程分离,可以在主线程中分离,也可以在子线程中分离,其中在子线程中分离要注意要在主线程退出之前分离,不然还未分离,主线程退出,所有线程都会退出,而未将子线程join,也未将子线程detach,会造成资源泄漏。
2023-09-04 23:33:11
290
15
原创 Linux多线程
线程是进程中的一个实体,是CPU调度和分派的基本单位。而进程则是操作系统资源分配的基本单位。 在Linux系统中,线程被称为轻量级进程(LWP),因为它们与其父进程共享许多资源,如地址空间、打开文件等。
2023-09-03 01:28:42
376
24
原创 数据结构之哈希
哈希(Hash)是一种将任意长度的二进制明文映射为较短的二进制串的算法。它是一种重要的存储方式,也是一种常见的检索方法。哈希函数通过特定方式(hash函数)处理输入,生成一个值。这个值等同于存放数据的地址,这个地址里面再把输入的数据进行存储。哈希算法是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原文件发生改变时,其标志的位置也会发生改变,此时的对应方式就不再适应,需要将数据重新进行标对应的位置。
2023-08-25 22:27:05
2164
34
原创 动态规划之路径问题
大致思路不变,先表示状态,用二维数组dp[i][j] 表⽰:到达 [i, j] 位置时,所有下降路径中的最⼩和。以[i,j]为结尾进行分析,到达[i,j]位置的上一层应当是[i - 1, j - 1],[i - 1, j],[i - 1, j + 1]中。位置[i + 1, j]或者 [i, j + 1]可以到达[i, j] 位置,dp的位置表示最低点数,所以选取 [i + 1, j], [i, j + 1]两者中的较小值减去dungeon[i][j]就是dp[i][j]的最小值。求的是血最多的时候?
2023-08-24 00:34:14
1350
24
原创 数据结构之并查集
现在给这些学生进行编号:{0,1,2,3,4,5,6,7,8,9},其中{0,5,7,8,9},{1,4,6},{2,3}分别是每组同学的编号,0,1,2分别是每组的组长。2.题目分析:可以用并查集来实现,对题目进行分析可以知道,要求集合的数量,所以需要上述3集合的合并函数和4集合的数量函数,其中3中又需要1函数,可以简单实现这几个函数,然后遍历题目中isConnected数组,只需要遍历一半即可。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。
2023-08-21 01:23:11
1658
28
原创 红黑树(RBTree)
/ 节点的颜色// 红黑树节点的定义// 节点的左孩子// 节点的右孩子// 节点的双亲(红黑树需要旋转,为了实现简单给出该字段)// 节点的值// 节点的颜色, _kv(kv), _col(RED) //默认为红节点{}插入红色节点树的性质可能不会改变,而插入黑色节点每次都会违反性质4,所以== 将节点设置为红色在插入时对红黑树造成的影响是小的,而黑色是最大的==
2023-08-15 20:41:51
755
30
原创 动态规划之斐波拉契数列模型
动态规划是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划最核心的思想,就在于。
2023-08-11 22:27:06
564
21
原创 二叉搜索树(AVL树)
节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或-1的节点被认为是平衡的。带有平衡因子-2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。// 该节点的左孩子// 该节点的右孩子// 该节点的双亲// 该节点所保存的数据int _bf;// balance factor // 该节点的平衡因子, _kv(kv), _bf(0){}public://插入//遍历。
2023-08-10 02:22:12
320
16
原创 牛客网刷题之链表(二)
此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在满指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。2.而这道题最后一个节点的next指向空,是没有环状结构的,但是前面结点中的值有的是重复的(每只牛编号唯一),这些重复的值可以构成“环状”,可以说是将值模拟成环状。问题分析:要将单链表按照大小重新排序,使大的在一边,小的在一边,所以定义两个头结点,遍历单链表,一个头结点连接大的结点,另一个头结点连接小的结点,然后再进行合并,给nullptr的给nullptr即可。
2023-07-24 11:30:03
611
28
原创 进程信号的理解
其中,signum是要设置处理方式的信号的编号,act是一个指向sigaction结构体的指针,用于设置信号处理方式,oldact是一个指向sigaction结构体的指针,用于保存原来的信号处理方式。查看信号,其中有62种信号,其中1 ~ 31是非可靠信号(非实时的),34 ~ 64是可靠信号(实时信号)。时候,对应的信号会被立即递达。OS可以将该进程在异常的时候,核心代码部分进行核心转储,将内存中进程的相关数据,全部dump到磁盘中,一般会在当前进程的运行目录下,形成core. pid这样的二进制文件。
2023-07-23 19:46:02
531
11
原创 牛客网刷题之链表(一)
以下题全部出自牛客网。题目题目考察的知识点链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的分类有单向、双向等多种类型。其中单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。单链表中的数据是以结点来表示的,每个结点的构成:元素 (数据元素 的映象) + 指针 (指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
2023-07-21 12:26:16
603
22
原创 进程间通信之共享内存
1.进程间通信的分类:(1)管道:1、匿名管道pipe;2、命名管道mkfifo(2)System V IPC:1、System V 消息队列;2、System V 共享内存;3、System V 信号量。(3)POSIX IPC:1、消息队列;2、共享内存;3、信号量;4、互斥量;5、条件变量;6、读写锁。前面已经了解了进程间管道通信,那么共享内存又是什么原理?
2023-07-19 01:06:30
2015
21
原创 进程间通信之命名管道
管道应用的一个限制就是(具有亲缘关系)的进程间通信,这种通信可以用来实现。如果我们想,可以使用FIFO文件来做这项工作,它经常被称为。1.什么是命名管道?命名管道(named pipe)也称为FIFO,它是一种文件类型,创建一个FIFO文件类似于创建一个普通文件。FIFO解决了只有具有亲缘关系的进程间才能通信的问题。并且命名管道是一种特殊类型的文件。2.匿名管道与命名管道的区别?
2023-07-17 10:42:13
736
13
原创 进程间通信之匿名管道
1.进程间为什么要进行通信?进程间通信的是为了协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。2.进程间通信的目的包括:数据传输:一个进程需要将它的数据发送给另一个进程;资源共享:多个进程间共享同样的资源;通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事情,比如进程终止时需要通知其父进程;进程间通信(IPC)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息;
2023-07-15 15:53:03
700
21
原创 银行账户管理系统
1、目的:(1)熟练掌握 C++语言的基本知识和技能:(2)掌握面向对象程序设计的基本思想和方法;(3)能够利用所学的面向对象基本知识和技能,解决简单应用的程序设计2、基本要求:(1)利用面向对象的方法以及 C++的编程思想来完成系统的设计;(2)在设计的过程中,建立清晰的类层次:定义各个类,每个类中要有各自的数据和成员函数:运用面向对象(继承、派生及多态性)来实现系统功能。(3)在系统的设计中,要有清晰的界面设计,同时采用文件进行读写操作。
2023-06-24 18:05:39
355
1
原创 了解set
C++中的set是一种关联式容器,它能够存储同一数据类型的数据,并且能从一个数据集合中取出数据。在set中,每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set是用红黑树实现的,集合中的每个元素只出现一次,并且是排好序的(默认按键值升序排列),但可以通过自定义比较函数来改变排序方式。红黑树是一种自平衡的二叉搜索树,它可以保证插入、删除、查找等操作的时间复杂度为O(log n)。set常用操作有:插入、删除、查找、遍历等。在C++ STL中,set容器定义在头文件中。
2023-06-09 15:42:05
371
7
原创 priority_queue(优先级队列)
在C++中,priority_queue是一个容器适配器,它提供了常数时间的最大元素查找。它通常实现为堆。堆是一种数据结构,其中最大(或最小)元素始终位于顶部。priority_queue是一个模板类,定义在头文件中。它有三个模板参数:元素类型、容器类型和比较函数类型(可选)。默认情况下,它使用std::vector作为其底层容器。
2023-06-03 15:50:08
3985
4
原创 了解list
C++中的list是一个双向链表,它是一个STL容器,可以用来存储任何类型的数据。list容器中的元素可以在任何位置插入或删除,而不会影响其他元素。list容器中的元素按照它们在容器中出现的顺序进行排序。可以使用STL算法对list容器进行排序、查找和操作。可以使用迭代器访问list容器中的元素。
2023-05-28 04:21:39
1225
1
原创 Linux中的文件描述符
打开一个文件,系统做了大致如下几件事,首先CPU会寻找对应的struct task_struct(也就是进程PCB);struct task_struct中有许多的struct file_struct *files指针,这些指针指向的就是不同的文件结构体,而struct file_struct结构体中就记录着文件描述符(
2023-05-25 21:15:57
4268
2
原创 系统方面对文件的打开,读写,关闭
如果文件描述符是与打开的文件相关联的,则会释放该文件所占用的资源。这里有一个小细解,strlen求的是‘\0’之前字符串的长度,众所周知,c语言规定‘\0’用于判断字符串的结尾,而打印的时候需不需要带上‘\0’?要想在文件中写数据,write()函数需要3个参数,fd,count易得,还需要一个缓冲区buf,这个缓冲区里面有给文件中写入的数据,给缓冲区中写入数据,需用到snprintf()函数。open()函数是一个系统调用,返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引。
2023-05-25 12:48:17
1029
原创 深入了解vector
在C++中,vector是一个模板类,它是一个多功能的、能够操作多种数据结构和算法的函数库。它是C++标准模板库中的部分内容,用于表示动态数组。vector可以自动扩展以容纳新元素,并且可以在任何位置插入或删除元素。vector是一个动态数组,可以自动扩展以容纳新元素。vector支持随机访问,可以通过下标访问元素。vector支持在任何位置插入或删除元素。vector的插入和删除操作可能会导致内存重新分配,从而导致性能下降。vector只能存储相同类型的元素。//无参构造。
2023-05-20 17:02:27
697
原创 linux进程控制
进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那么子进程就一直处于Z状态,维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,Z状态一直不退出,PCB一直都要维护;如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息。(查看进程的退出码)所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,
2023-05-13 18:01:32
343
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人