自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 多个进程怎么样共享一个监听端口?

其中一个进程负责监听端口,接受连接请求,而其他进程可以通过 IPC 与监听进程通信,将客户端连接转发给监听进程处理。但是,多个进程同时监听同一个套接字通常是不可行的,因为操作系统会将连接请求分配给其中一个进程,而其他进程则无法获得连接。后的子进程中关闭该监听套接字,而子进程创建自己的监听套接字。这样,每个子进程都有自己独立的监听套接字,可以同时监听相同的端口。函数可以创建子进程,但子进程会继承父进程的文件描述符,包括监听的套接字(socket)。因此,在一个父进程监听的套接字上,

2024-02-27 15:26:53 651 1

原创 文件描述符

文件描述符(File Descriptor)是操作系统为了标识和管理打开的文件或其他I/O资源而提供的一种机制。在Unix和类Unix操作系统中,每个打开的文件、设备、管道、套接字等都会被分配一个唯一的文件描述符,通过这个文件描述符可以对相应的I/O资源进行操作。文件描述符是Unix和类Unix系统中实现文件和I/O操作的基本机制之一。通过文件描述符,操作系统能够管理和控制应用程序对I/O资源的访问,从而实现了文件的读写、进程间通信、网络通信等功能。不同的文件描述符对应于不同的打开文件或I/O通道。

2024-02-25 15:56:25 320 1

原创 什么是右值引用,跟左值又有什么区别

在C++中,左值指的是可以取地址的表达式(即具有标识符的变量、对象或表达式),而右值指的是不可以取地址的表达式(如临时对象或字面量)。右值引用是一种用于引用右值的特殊类型的引用类型。左值可变,右值不能(仅对基础类型适用,用户自定义类型右值引用可以通过成员函数改变);左值:能取地址,或者具名对象,表达式结束后依然存在的持久对象;右值:不能取地址,匿名对象,表达式结束后就不再存在的临时对象;与左值引用相比,右值引用更加灵活,可以更好地支持移动语义、完美转发等特性,能够提高程序的效率和性能。

2024-02-24 13:51:54 398

原创 NULL和nullptr的区别

3.重载决议:如果一个函数有重载版本,其中一个接受指针类型的参数,使用 nullptr 可以避免重载决议的歧义问题。因为 nullptr 有独立的类型,可以更容易地选择正确的重载版本。1.类型安全:nullptr 是一个特殊的空指针常量,具有独立的类型 std::nullptr_t。NULL 可能在某些上下文中引起歧义,因为它只是一个宏,其实际值可以是 0 或其它。2.可读性:nullptr 更加明确地表示空指针的概念,使代码更易读,更容易理解。NULL 在某些情况下可能导致重载决议的不确定性。

2024-02-24 10:45:43 492

原创 广度优先遍历

它从树的根节点开始,逐层遍历树的节点,先从左往右访问当前层的所有节点,再逐层向下遍历。这是因为BFS首先访问的是距离起始节点最近的节点,逐步向远离起始节点的节点扩展,直到达到目标节点。:从队列中取出一个节点,访问该节点,并将其所有未访问过的邻居节点(子节点)放入队列中。:BFS使用队列数据结构来存储待访问的节点,保证了先进先出(First-In-First-Out,FIFO)的顺序,即先访问的节点先被处理。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进”的规则,两者背后的思想是一致的。

2024-02-19 16:38:14 233 1

原创 完满二叉树

full binary tree)除了叶节点之外,其余所有节点都有两个子节点。复习二叉树时发现了一个有意思的二叉树,叫完满二叉树(

2024-02-19 16:13:41 100 1

原创 C++11关键字decltype

是一个十分灵活的工具,能够在编译期间获取表达式的类型,并且可以用于声明变量、定义函数返回类型、模板编程等各种场景。时,它会根据提供的表达式来推导出一个类型。这个类型可以是变量、函数、表达式或任何合法的 C++ 实体。的工作原理是对表达式进行分析,然后返回该表达式的类型,而不会对表达式进行求值。是任何合法的 C++ 表达式,包括变量名、函数调用、算术运算、类型转换等等。在编译期间进行类型推导,而不会运行时产生任何额外的开销。是 C++11 引入的关键字,用于获取表达式的类型。

2024-02-16 09:55:58 190 1

原创 关于priority_queue队列的一些知识

总的来说,优先队列(Priority Queue)是一种特殊的队列数据结构,它的特点是队列中的元素按照一定的优先级顺序排列,而不是按照它们被插入的顺序排列。:优先队列中的元素按照一定的优先级顺序排列,通常使用堆(Heap)数据结构来实现,堆是一种完全二叉树,满足堆性质,即父节点的值(优先级)不大于(或不小于)其子节点的值。:优先队列的插入和删除操作的时间复杂度通常为 O(log n),其中 n 是优先队列中的元素个数,这是由于堆的性质决定的。中的元素值是不被允许的,因为这会破坏堆的结构,破坏其优先级性质。

2024-02-16 09:48:54 382 1

原创 从数组和链表的不同来看待内存和缓存

对数组来说,数组是一块连续的内存空间,元素紧密排列,空间效率更高,但是一次性分配内存也可能导致内存浪费,而且在数组进行扩容时也需要时间和空间成本。而对于链表来说,链表是由节点组成,节点之间通过引用(指针)连接,在添加和删除元素时只需要改变指针的指向就行,以节点为单位进行动态内存分配和回收,灵活并且插入和删除效率高,但是需要额外的空间来存储指针,在频繁的插入和删除时更容易导致内存碎片化。由于缓存的容量有限,只能存储一小部分频繁访问的数据,因此当 CPU 尝试访问的数据不在缓存中时,就会发生。

2024-01-24 16:20:43 353 1

原创 为什么数组要求相同类型的元素,而在链表中却没有强调相同类型呢?

例如,数组同时包含 int 和 long 两种类型,单个元素分别占用 4 字节 和 8 字节,此时就不能用以下公式计算偏移量了,因为数组中包含了两种“元素长度”。因为链表由节点组成,节点之间通过引用(指针)连接,各个节点也就是各个内存块之间是独立的,所以是可以存储不同类型的数据,例如 int、double、char 等。首先,数组是一块连续的内存空间,数组长度固定,而链表则可以是不连续的空间,链表中的每一个元素都是一个节点对象,各个节点通过指针链接,长度不固定。首个元素的地址偏移量是。

2024-01-24 15:52:00 349 1

转载 尾递归优化

如果在函数A的内部调用函数B,那么在A的调用记录上方,还会形成一个B的调用记录。等到B运行结束,将结果返回到A,B的调用记录才会消失。如果函数B内部还调用函数C,那就还有一个C的调用记录栈,以此类推。如果所有函数都是尾调用,那么完全可以做到每次执行时,调用记录只有一项,这将大大节省内存。,因为调用位置、内部变量等信息都不会再用到了,只要直接用内层函数的调用记录,取代外层函数的调用记录就可以了。尾调用之所以与其他调用不同,就在于它的特殊的调用位置。也是一样,等到里面的函数依次执行完毕,它们的。

2024-01-19 12:01:19 33 1

原创 什么是尾递归?尾递归和普通递归的区别是什么?

总的来说,尾递归在递归过程中最后一步执行递归函数的步骤,并且在函数结束前不再需要执行任何其他计算或操作;常规递归的过程是:每次函数调用时需要保存当前函数信息,比如传入参数、局部变量值等,并将这些信息保存在栈空间中。在递归过程中,每一次递归调用都会新建一个对应的栈帧(栈的一层)并保存上述信息。可以看出,在每次递归调用的时候,系统都会开辟一个内存空间保存临时变量,当n过于大时,需要开辟的内存空间就过大,就可能导致栈内存溢出。尾递归是指递归发生在函数的最后一个语句中,从而使函数调用只需要一个栈帧。

2024-01-19 11:56:29 928 1

原创 #ifndef的作用

举个例子,假如有一个源文件a,一个头文件b和一个头文件c,源文件a包含了头文件b和c,而头文件b又包含了头文件c,那么头文件c是不是就被源文件a包含了两次,如果你在头文件c中定义了结构体或者类,编译时就会出现重复定义的错误。网上有些资料对于ifndef作用都是防止两个源文件包含同一个头文件,但是我感觉不太对,因为你头文件的作用就是被不同源文件包含啊,那为什么作用变成了防止同一个头文件被多个源文件包含,有点不合理,我感觉ifndef作用是防止源文件重复包含头文件。

2024-01-06 15:21:55 377 1

原创 Qt安装组件程序下载组件时出现错误,显示哈希签名失败

添加新组件,然后去安装组件程序中下载,前面都没问题,到最后一步安装过程中出现了下载哈希签名失败的错误。注意有exe后有空格,最后在安装的过程中就不会出现哈希签名失败了。找了好久解决了,首先在你的安装目录中cmd。

2024-01-06 15:04:23 1625 2

原创 Qt reading project进度条 红色

找了半天都没解决,然后一看报错信息,wc,说我少了组件webengine。今天打开qt项目,发现reading project 进度条成红色了。去安装组件的应用程序一看,还真是。然后源文件头文件什么的都变灰。百度到:有可能是有中文路径。还有什么.user要删了。

2024-01-04 15:26:55 734 1

原创 Qt中的快捷键Ctrl + c无法复制了

百度到的解决方法是:不小心开启了vim编辑模式,连续按两下alt+v退出vim模式就行了。没用,然后继续搜,突然想到我之前好像重新设置过快捷键,结果一看,还真是,今天突然发现qtcreator中的ctrl+c不能复制了,但是鼠标右键的复制却可以,然后去百度上搜。热键冲突了,,尴尬。把复制行的快捷键删了就好了。

2024-01-01 16:43:36 668

原创 迭代器失效

迭代器失效是因为对容器进行添加,删除,修改等操作,这会引起容器内元素的位置或者数量发生变化,从而使得之前迭代器所指向的的元素位置改变或者不存在了,导致迭代器失效。迭代器是c++中一种方便对容器进行遍历的工具,在遍历的同时可以对容器进行添加,删除,修改等操作。

2023-12-19 11:00:36 370

原创 为什么拷贝构造函数必须使用引用传递,而不能使用值传递?

如果使用的是值传递,那么传递的参数肯定为本类的对象,就又会调用本类的拷贝构造函数,形成无限递归的循环,可能导致程序的奔溃。简单说就是,拷贝构造函数创建对象副本的时需获取源对象的值。

2023-12-16 17:21:30 75

原创 int middle = left + ((right - left) / 2) 防止溢出

当right+left的值超过int的最大值的时候可能会溢出(哪怕最后除2后不会溢出,但是right+left还是溢出的)。所以left+(right-left) 实际上限制了相加的两个数字的大小,不会造成溢出。这道题是用二分查找的方法解决的,我写完之后看题解发现了这样一行代码。看题解下面的评论说这样写是为了防止溢出。今天写题的时候发现了一个细节。

2023-12-14 13:41:58 113

原创 LeetCode两数之和

刚开始没想到用哈希表,直接用了双层for暴力解法,看了题解才知道最佳解法是用哈希表,我还是太菜了。

2023-12-13 22:27:39 30

原创 接收百度传回的JSON对象后显示 param[face_field] format error

解决了接收百度传回的JSON对象后显示 param[face_field] format error的问题

2023-12-12 22:27:10 253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除