- 博客(37)
- 收藏
- 关注
原创 condition_variable---C++条件变量
线程仅在 pred 返回 false 时被阻塞,并且如果在超时前 pred 变为 true 或线程被唤醒,则返回 true;wait 方法用于阻塞当前线程,直到另一个线程调用同一 condition_variable 对象的 notify_one() 或 notify_all() 方法来唤醒等待的线程。这是一个带谓词的版本,线程仅在 pred 返回 false 时被阻塞。wait_for 方法用于阻塞当前线程,直到另一个线程调用 notify 方法唤醒它,或者直到指定的超时时间到达。
2024-07-07 21:29:57
752
原创 基于boost::beast的http服务器(上)
是一个基于Boost库的C++网络库,特别用于开发高性能的网络应用程序。它提供了一组易于使用的API,主要用于处理和协议,并支持异步操作和多线程处理。
2024-06-30 14:50:09
1133
原创 lambda函数
捕获所有变量的拷贝作为副本,不可以修改。其实就是匿名函数,和匿名对象有异曲同工之妙。(c,&d) 捕获c的值,d的引用。exception 可以抛出异常。mutable 可以修改副本。& 捕获所有变量的引用。&b 捕获b的引用。
2024-06-23 20:39:21
274
原创 qt基本窗口类(QWidget,QDialog,QMainWindow)
这些函数一般都是类的成员函数,匿名函数,或者静态函数,全局函数因为是自定义的,qt提供的类并不知道什么时候调用它,所以要先将标准信号函数与自定义的信号函数关联起来,当标准的信号函数触发就会调用自定义的信号函数,自定义的信号函数又和自定义的槽函数关联着,就会触发自定义的槽函数。
2024-06-22 19:33:47
384
原创 system与excel族函数区别
comand是命令的路径,一般我们用绝对路径system函数会创建新的进程,新的进程执行完返回原来的进程,原来的进程则继续执行后面的代码段。如我们创建一个sys.cpp文件,在其中去执行另一个sys1可执行文件同目录下创建一个sys1.cpp文件,然后将其编译链接为可执行文件可以看出先执行完sys1后又返回原来的进程执行了。
2024-06-16 21:31:37
610
原创 Problem with MergeList /var/lib/dpkg/status(不说废话直接解决)
Problem with MergeList /var/lib/dpkg/status(不说废话直接解决) 1.先备份,免得全没了sudo mv /var/lib/dpkg/status /var/lib/dpkg/status.old
2024-06-16 12:24:42
482
原创 僵尸进程与孤儿进程
僵尸进程:子进程执行完毕,父进程没有对其资源进行回收从而使子进程PCB遗留在内存,从而产生僵尸进程。僵尸进程积累过多会导致无法创建新的进程孤儿进程:指子进程还在运行中,父进程已经退出,那么该进程会被守护进程init收养,由守护进程来回收其资源。
2024-06-13 12:12:37
258
原创 动态规划算法
可以看到动态规划的时间复杂度是O(N),比递归好了不少,虽然空间复杂度是O(N),但是实际只需要两个变量存放前面的两个值,所以空间复杂度还可以优化到O(1)这道斐波那契数列,很多同学直接一手递归就解决,但是递归的时间复杂度O(2^n)明显要高,但是我们今天重点是动态规划。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。1.确定dp数组以及下标含义。表示)形成的序列称为。3.dp数组如何初始化。
2024-06-09 11:29:17
429
原创 enable_shared_from_this
它能让一个已被智能指针管理的对象安全的生成其他的std::shared_ptr实例,该实例与原智能指针共享对象的所有权。因为在使用智能指针的场景下,如果再传入this指针,会导致出现其他的问题,智能指针的优势也就体现不出来了。当一个类对象A被shared_ptr管理,且类A的成员函数需要把本对象作为参数传递给其他的函数时。使用前需要继承类enable_shared_from_this。enable_shared_from_this是一个模板类。2.为什么不生成一个shared_ptr<this>
2024-05-23 21:42:39
171
原创 回溯法---Leecode每日一题
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。该列表不能包含相同的组合两次,组合可以以任何顺序返回。所有可能的有效组合的列表。没有其他符合的组合了。没有其他符合的组合了。
2024-05-13 20:40:39
265
原创 Sylar服务器框架---线程同步模块
1.sylar的线程同步模块使用了pthread线程库的互斥量,读写锁,自旋锁。原子锁是使用的c++的2.使用了RALL的方法,即资源构造即初始化,出作用域就析构。避免了我们手动进行资源申请和释放的相关操作。这里具体的操作是Mutex类创建一个对象时通过构造初始化锁,析构时销毁锁;加锁,解锁两个方法(用户不可自己调用)交由ScopedLockImpl<Mutex>类来调用,构造时就加锁,析构时解锁。和muduo中的基本一样。
2024-05-12 21:58:05
435
原创 new delete 与malloc free的区别
执行过程:new,delete执行会。,malloc需要计算分配空间,本质:new delete是。,而malloc free是。返回类型:new返回的是我们。void*,再通过强制转换。调用类的构造函数,析构函数。计算分配空间方式:new。通过sizeof()计算。,malloc 返回的是。,malloc失败返回。异常:new申请失败。
2024-05-01 17:46:52
163
原创 i/o多路复用(一次认清select,poll,epoll的区别)
关键词:线性结构存储 用户态到内核态频繁拷贝 文件描述符最大限制1024 每次轮询所有描述符1.select是底层原理是基于一个线性结构fd_set来存储文件描述符集合2.每次select都会将文件描述符集合从用户态拷贝到内核态,由内核来检测对应的文件描述符是否有事件发生,3.内核检测到文件描述符有对应事件发生,就将对应的标志位置为1,检测完毕将修改后的集合拷贝回用户态。4.然后再由用户遍历每个文件描述符是否有事件就绪,有事件就绪则执行相关的事件。
2024-05-01 17:36:37
1026
原创 主机字节序与网络字节序
所谓主机字节序,就是数据在内存中的存储顺序,一般的cpu字节序都是小端字节序,如我们的x86,即低地址存低位字节,高地址存放高位字节。例如一个十六进制数0406H,在内存中存储的顺序就如下。
2023-12-29 16:44:38
475
1
原创 简单TCP通信网络编程
简单TCP通信的案例,通过流套接字实现。建立连接的过程包括三次握手,即客户端发送SYN请求,服务器响应SYN-ACK,客户端再次确认ACK。断开连接的过程包括四次挥手,即客户端发送FIN请求,服务器响应ACK,服务器发送FIN请求,客户端响应ACK。
2023-12-29 16:14:09
1404
4
原创 C++类中的构造函数
知道C++中定义的对象初始化可以通过成员函数进行初始化,但是每一个对象在初始化的时候就应该有对应的初值,否则就失去对象的意义了。所以C++提供了构造函数来处理对象的初始化。
2023-10-21 14:47:45
114
1
原创 哈夫曼树及其应用
哈夫曼编码是一种压缩数据的算法,它通过将出现频率较高的字符用较短的编码表示,而将出现频率较低的字符用较长的编码表示,从而达到压缩数据的目的。哈夫曼编码常用于数字信号处理、通信系统、数据传输和存储等领域,可以大幅减小数据存储和传输的成本,并提高数据传输的效率。同时,哈夫曼编码也可以用于加密和解密,在保护信息安全方面发挥重要作用。
2023-10-09 17:33:24
1671
1
原创 head,tail操作广义表
已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是()?//取除了首元素以外的元素,不去除括号,所以有两个括号。取广义表除了首个元素以外的元素,但是不去除括号。取广义表首个元素并去除外层括号。
2023-10-03 16:16:19
818
2
原创 二叉树的创建与遍历
N个节点的有限集合。该集合由一个根节点和两颗互不相交被分别称为“左子树”和“右子树”的二叉树组成。其实这些定义并不重要,我们清楚知道它到底是什么就够了,不要被所谓的“形”绑住了。
2023-09-06 17:45:36
89
1
原创 C++运算符重载
如果按照C语言的方式我们需要写几个不同函数名的函数,但是c++提供了函数的重载方法,只需要。都可以进行输出,但对于我们自己定义的一些数据类型,如类对象(让你直接输入或者输出一个复数),如果想直接输出他们,则需要对流插入,流提取运算符进行重载。,我们在主函数只需要调用sum函数就可以,系统会根据你传递实参的类型,个数自动寻找到所需要的函数,这就是重载。等等,如果想实现两个复数的相加,仅仅用+我们无法实现,但是通过重载运算符+,我们可以直接实现两个复数的相加。下面为了方便,我们只写函数的声明,函数体内容省略。
2023-05-07 14:14:14
79
原创 变量的存储类型(全局,局部,静态,动态)
存储类型是指变在内存中的存储方式,有静态存储和动态存储方式。静态存储方式的变量存储在内存的静态区,在程序编译时就已经分配好了内存空间。在整个程序运行时,该变量一直占有固有的内存空间,程序结束后才释放该部分内存空间。其中静态局部变量和全局变量存储在静态存储区。动态存储方式的变量存储在内存的动态区,在程序运行过程中,只有当变量所在的函数被调用时候,该变量才会被分配内存空间,当被调函数调用结束时候,该变量内存空间就会被释放,值就会消失。局部变量存储在动态区。
2023-04-06 15:40:29
5003
2
原创 描述小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。
小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。
2023-04-04 23:26:10
215
原创 不用临时变量交换两个数-常见面试题
实用的方法,适用大部分情况,但是当a+b的和超过了int的范围,此法便不在适用。通用的方法,利用位操作符(很明显,这个方法属于投机取巧了。按位与&,按位或|,按位异或^,
2023-04-03 14:18:28
91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人