![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 83
Wild_Pointer.
在校大学生,热爱写bug
展开
-
Qt Object:智能即时聊天室项目
3.通过QNetWork模块,对其鉴权元素进行处理,对特定的地址进行POST请求,获取Token。5.针对用户作输入操作时,该项目采用正则表达式检测用户异常输出,防止恶意的SQL注入攻击及不规范的输入,减少服务端的恶意请求,降低成本。4.针对列表模块使用了模型/视图架构,针对好友,群聊以及智能聊天机器人分别对其映射,将数据与视图隔离,规范了代码,降低耦合。6.针对用户登录时,项目使用MD5加密算法对其密码等数据进行加密,减少用户被恶意攻击,数据泄漏的几率。原创 2024-06-22 14:59:48 · 696 阅读 · 0 评论 -
数据结构:顺序栈
顺序栈(Sequential Stack)是一种使用数组来实现的栈数据结构。栈是一种后进先出(Last In First Out, LIFO)的数据结构,只允许在栈顶进行数据的添加(push)和删除(pop)操作。如果栈已满,这可能会触发数组的扩展(如果使用动态数组):移除栈顶的元素,并返回它。:元素只能从栈顶添加或移除,这保证了最后添加的元素将是第一个被移除的。:在栈满时,如果使用动态数组,可以自动扩展数组的大小以容纳更多元素。:顺序栈通常使用一个固定大小或动态大小的数组来存储栈中的元素。原创 2024-06-07 19:35:03 · 363 阅读 · 0 评论 -
数据结构:顺序串
在顺序串中,字符串被存储在一个连续的内存块中,通常是数组或动态数组(如C++中的。顺序串的主要优点是它提供了一种简单且高效的方式来访问和修改字符串中的字符。:由于字符串存储在数组中,任何字符都可以在常数时间内被访问,即O(1)时间复杂度。:在需要频繁访问和修改字符串的场景下,顺序串提供了一种高效的数据结构。:可以在字符串的任何位置插入字符,但可能需要移动插入点后的所有字符。:可以从字符串中删除任何字符,但可能需要移动删除点后的所有字符。:字符串的所有字符都存储在连续的内存位置,这有助于提高访问速度。原创 2024-06-07 19:25:12 · 371 阅读 · 0 评论 -
数据结构:线索二叉树
线索二叉树(Threaded Binary Tree)是一种对普通二叉树的扩展,它通过在树的某些空指针上添加线索来实现更高效的遍历操作。线索二叉树的目的是减少查找特定节点(如前驱或后继节点)所需的时间,从而提高树的搜索效率。:每个节点的前驱是其在中序遍历中直接前的一个节点,后继是直接后的节点。线索二叉树允许我们通过线索快速找到这些节点。:在二叉树的空指针(左子树或右子树的指针)上添加线索,这些线索可以指导我们找到节点的前驱或后继。:线索二叉树是基于普通二叉树的,它保留了二叉树的所有性质。原创 2024-06-07 19:11:00 · 501 阅读 · 0 评论 -
数据结构:哈夫曼树及其哈夫曼编码
哈夫曼树(Huffman Tree)是一种特殊的二叉树,由David A. Huffman在1952年发明的,用于数据压缩领域。它将每个字符映射为一个唯一的二进制串,这些二进制串的长度不同,且是根据字符出现频率来确定的。频率越低的字符,其编码越长。:从根节点开始,向左子树走标记为0,向右子树走标记为1,直到到达叶节点,此时叶节点对应的字符的路径标记就是其哈夫曼编码。2.从队列中取出两个权重最小的节点,创建一个新的内部节点,其权重为这两个节点权重之和。:所有叶节点的权重乘以其到根节点的距离之和是最小的。原创 2024-06-07 19:11:35 · 2014 阅读 · 0 评论 -
数据结构:共享栈
共享栈(Shared Stack)是一种内存管理技术,通常用于操作系统和编程语言的运行时环境中,以支持多线程或多进程的程序。:在多线程环境中,线程切换时可以更快速地保存和恢复执行状态,因为所有线程都使用同一个栈。:操作系统或运行时环境可以更简单地管理内存,因为它们只需要维护一个共享的栈结构。:共享栈的使用需要考虑到安全性问题,确保一个线程的操作不会破坏其他线程的数据。:共享栈可以减少内存的使用,因为它避免了每个线程或进程都需要自己的栈空间。原创 2024-06-06 23:13:09 · 249 阅读 · 0 评论 -
数据结构:单链表
/定义函数InitList用于初始化不带头结点的单链表//定义函数CheckList用于查看不带头结点的单链表是否为空//定义函数InitNodeList用于初始化带头结点的单链表//定义函数CheckNodeList用于查看带头结点的单链表是否为空//定义函数CheckOrder用于遍历链表查找结点并判空//定义函数InsertNextNode用于在指定结点进行后插操作//定义函数ListDelete用于按位序删除数据//定义函数NodeDelete用于指定结点删除数据。原创 2024-06-05 20:03:22 · 630 阅读 · 0 评论 -
STL源码刨析:序列式容器之list
list的迭代器定义和结构。原创 2024-05-28 20:46:59 · 689 阅读 · 0 评论 -
STL源码刨析:序列式容器之vector
本系列将重点对STL中的容器进行讲解,而在容器的分类中,我们将容器分为序列式容器和关联式容器。本章作为容器的实现源码的讲解,将简单介绍这两种类型的容器的区别,再对每一个类型所含的容器的实现源码进行讲解。原创 2024-05-26 21:02:29 · 1072 阅读 · 0 评论 -
C++高并发内存池:PageCache层
由上文我们知道,PageCache层不仅要实现对CentralCache层分配内存和对其释放的内存进行管理,我们还需要针对PageCache层设计锁,保证在同一个时间内只有一个来着CentralCache层的哈希桶向PageCache层申请内存,而且我们还需要实现当PageCache层内存不足时,向OS申请内存的接口以及当PageCache层内存多余时,向OS释放内存的接口。PS:以上便是PageCache层的实现代码,重点是思路,提供的代码只作参考作用!大于256KB的内存申请和释放。原创 2024-05-22 19:58:46 · 568 阅读 · 1 评论 -
C++高并发内存池:CentralCache层
且每一个Span用于下标不同,所以指向的分配内存也会不同,当一个Span指向的内存大于一页时,我们还需要定义存储页数的变量,通过这两个变量我们还可以快速定位内存的区间。根据上一小节我们知道,CentralCache层存储的对象是一个一个的哈希桶,而哈希桶内存储的对象是一个类型为Span的双向链表,所以我们也得设计一个类似于ThreadCache的单向链表一样的变量存储这个双向链表,而且这个单向链表的类型还需要具备有进栈,出栈,插入和删除的功能。PS:为方便遍历寻找空闲的地址进行分配,所以设计为双向链表。原创 2024-05-21 20:44:26 · 719 阅读 · 1 评论 -
C++高并发内存池:ThreadCache层
由图可看出,ThreadCache存在一个链表,该链表的每一个元素的指向一个节点(取名为FreeList),该节点存在两个成员类型,一是指向下一个节点的指针,二是指向对应内存大小的指针,故ThreadCache也属于一种哈希桶的结构。为什么哈希桶的大小为208?本篇文章将着重对内存池的ThreadCache层进行讲解,而在了解ThreadCache层之前我会对向内存池申请分配内存以及释放内存的流程进行讲解,直观的感觉到在处理申请和释放内存的请求时内存池的操作,再对其ThreadCache层进行讲解。原创 2024-05-20 20:39:26 · 905 阅读 · 1 评论 -
STL源码刨析:迭代器概念与Traits编程方法
接下来我们将重点对如何判断迭代器类型,判断模板函数返回值的类型,处理模板函数接受元素为原生指针的情况,针对模板函数接受的元素为const的情况进行特化以及针对迭代器类型进行高效率的函数设计,一共五种解决问题都会在该小节进行讲解(迭代器的设计在STL的实现中起到了至关重要且十分基础的作用,本篇文章也皆在对迭代器的设计思想以及迭代器的实现进行分析讲解,其中文章出现的Traits方法就属于迭代器设计的基础,对于迭代器的正确使用有着不可替换的地位,所以本篇文章也将重点对Traits方法进行讲解。原创 2024-05-19 19:23:37 · 452 阅读 · 1 评论 -
C++高并发内存池:初步了解
什么是高并发?前言针对前篇文章《STL源码刨析:空间配置器(allocator)》中所描述的二级配置器小节中关于内存池的讲述,本人将专门对C++高并发内存池的理论以及实现细节进行针对性讲解。本篇文章将简单的对C++高并发内存池的理论以及结构分层进行描述,后续文章将通过分层的方式,对C++高并发内存池的理论以及细节进行讲解,还会配上实现源码方便读者理解。什么是高并发?高并发是指系统能够同时处理大量并行请求或操作的能力。原创 2024-05-12 20:07:38 · 941 阅读 · 1 评论 -
STL源码刨析:空间配置器(allocator)
针对阅读STL源码而言,或许许多人觉得阅读侯捷所著的《STL源码刨析》是过时的,但是我并不觉得,因为这些人往往是阅读过该书,学的更深入才对这本书进行这样的评价,针对入门的为而言,有一本书能带你大致了解STL源码的框架,这是极为便利的。针对最新版本的源码而言,这本书的确是过时的,但是并不影响我们去了解STL源码的框架,去熟悉源码的语法。我觉得一本好书不在于所有人的评价,只要它是让人学习的过程中首先了解到的便是好书。原创 2024-05-10 21:33:07 · 583 阅读 · 0 评论 -
C++设计模式(下):行为型模式
本篇博客包含11种设计模式,自从学习这么多种设计模式后,我的心态也发生了变化,或许不会存在永远按照设计模式来设计的程序,一个项目也可能存在符合多种设计模式的情况,但是无论正确与否,我觉得可读性强的,利于维护的,方便增加功能的项目就是好项目。(例如有三个对象,调用顺序是A->B->C,把所有的项目都先传递给A,A拿到所有的项目后,把属于自己负责的项目留下来,把剩下的传递给B,然后B把属于自己的留下来,把不属于自己的再传递给C)1.定义抽象元素类:定义访问者可调用的函数,访问者通过该函数实现修改元素内的内容。原创 2024-05-06 16:38:37 · 876 阅读 · 0 评论 -
C++设计模式(中):结构型模式
继上一篇《C++设计模式(上):创建型模式》博客,本文章将重点讲解结构型模式,也会根据上一篇博客的方式,分别从是什么,为什么,实现步骤,优缺点以及具体的实现代码四步来讲解具体的设计模式原创 2024-05-04 16:13:05 · 833 阅读 · 1 评论 -
C++设计模式(上):创建型模式
本文章将重点讲解创建型模式,在本人分布的《C++设计模式:前传》中曾简单概述了一下创建型模式细分多少种设计模式,本篇文章将讲解这些设计模式的理论,优缺点和代码实现。原创 2024-05-03 21:52:52 · 30 阅读 · 1 评论 -
C++设计模式:前传
这对于之前的我看来,设计模式的存在可有可无,也可以这么说,是我对设计模式的认识太少。俗话说的好:前人种树后人乘凉,在计算机这条道路上,无数前辈总结出来的经验还是有用的,为什么我会有如此想法呢?而这其中多多少少与设计模式有着千丝万缕的联系,在我不断的优化代码的过程中,我也意识到了设计模式的重要性,于是便有了这篇文章原创 2024-05-02 21:26:42 · 20 阅读 · 0 评论 -
MinGW:从入门到链接库
MinGW是一个在Windows系统上运行的GNU编译器套件,支持C和C++语言的编译。在学习MinGW后,我们将对代码的编译链接有更多的了解,也会对静态链接库和动态链接库有一个清晰的认知。针对编译过程,分为预处理,编译,汇编以及链接四种阶段,在每一个阶段生成的文件都不同,接下来将对每一个阶段执行的命令进行解析,并且分析每一个阶段代码的变化。原创 2024-04-16 20:40:27 · 1185 阅读 · 0 评论 -
Effective C++(中):Scott Meyers著
本条款主要讨论的是关于swap函数,标准库中的swap函数是由模板实现的,传入的参数必须支持复制构造函数或者赋值重载运算。本条款通俗易懂,了解基础语法的同学都应该知道——对象定义被执行后会调用构造函数,如果该对象被构造后没被调用(例如该对象被调用之前有函数抛出异常的情况,该对象可能就没有被调用),就会造成时间和空间上的浪费,还需要承担该对象的析构成本。本条款涉及C++中的生命周期问题,有一个很有意思的关键字——const,对于书中延长函数中匿名对象的生命周期的代码示例,我觉得有误(经过多种途径了解,原创 2024-04-09 19:33:48 · 568 阅读 · 0 评论 -
Qt Creator:QThread源码刨析
本篇文章将从源码的角度出发,简单的介绍QThread类从创建到消亡所执行的过程后,将重点分析源码刨析QThread的主要函数,分析在这些函数中都执行了什么操作原创 2024-03-31 15:22:24 · 1010 阅读 · 1 评论