自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

净无邪博客

三少爷的剑:剑气纵横三万里,一剑光寒十九洲!

  • 博客(375)
  • 资源 (16)
  • 问答 (1)
  • 收藏
  • 关注

原创 c++多线程(一个简单c++11多线demo)

并发编程和并行编程从实现效果来看几乎一样,但并发编程更加偏向业务流程拆解和独立,而并行编程往往更加偏向显著提升性能,不过大部分两者区别不大。真正意义的并发编程是每个线程都拥有一个专属的cpu,当cpu算力远远过剩时,可以用cpu空闲时间切换的执行多个线程的指令,由于时间非常短暂,人们感觉是多个进程同时运行,但实际cpu是主条执行每个线程指令,从而实现了多线程并发执行效果。每个进程都拥有一个独立的内存空间和一个主线,可以有多个线程。每一个线程都拥有专属自己独立的栈空间和堆空间,并且共享同一个进程的内存空间

2023-02-04 16:30:22 1213 1

原创 设计一个LRU(最近最少使用缓存)结构——C++

本体主要是设计一个LRU结构,LRU主要用在缓存策略上保证最近最少使用的数据页换出,从而提高CPU查找缓存的命中率。题目主要是设计一个结构类型struct Lru{};该类型包含两个成员方法get(int)和set(int,int),且要求这两个方法的时间复杂度为O(1)。查找时间复杂度为O(1)我们一般想到查表,比如std::unordered_map和std::unordered_set,但是题目还要求插入和删除数据也是O(1),这时一般的map和set和vector都不能满足要求,只有链表可以符合要求

2022-02-26 20:56:43 1070

原创 求最长不含重复字符的子字符串——C++

拿到题目第一想法是滑动窗口,用左left右right指针只差表示不重复子字符串长度,然后右指针依次右移动,假如入到重复字符,则更新左指针到不重复的字符串位置。比如abba,此时ab为不重复,当右指针移到abb时有重复字符,此时需要更新左指针到不重复的字符位置,也即abb的最后一个b的位置,此时左右指针指向同一个值。如何更新左指针到最近重复字符位置呢,此时需要用一个哈希表记录每个字符和对应字符的下标,并且遇到重复字符则更新为最近位置。关键代码如下:

2022-02-22 23:21:41 2545

原创 求回文链表——C++

2.1题目分析该题有三种常见解法,分别是递归、拷贝到数组再判断回文、反转后半部分链表。下面是采用后面两种方法解题。2.2反转后半部分链表由于回文是前后对称,故只需要反转链表后半部分内容,再与前面进行比较即可。找到链表后半部分源码如下:

2022-02-19 20:28:39 389

原创 一个简单计算器(不含括号和负数)实现——C++

根据题意要求,分析出需要给字符串去空格,以及采用栈方式将加减符号先压入栈,然后把乘除符号后面压入,并且最多压入两个元符号(+ *)就要清空符号栈。思路:1. 先去空格2. 符号栈,数字栈3. 提取字符+、-、*、/,提取数字val=val*10+str[i]-'0'4. 先运算*、/,结果压入栈,再把压入栈的+、-弹出运算5. 先遍历字符串数组,然后区分是加减号和乘除号。如果是加减号,则判空。如果为空则直接压入符号栈;非空则循环计算和消耗符号栈,知道符号栈为空为止。如果是乘除号,则判断。如果为

2022-02-08 23:09:39 739

原创 求最长回文子串——C++ (动态规划+暴力解法)

看到该题第一想法是暴力解法,即最长子串的长度从最长到最短开始遍历,假如前面出现回文则直接返回,代码可以参考最后面代码,不过该解法时间复杂度为O(^3)超过时间限制,故考虑动态规划。本题也是采用动态规划才通过啊,下面是具体分析1. 状态方程: f(i, j) = true 表示回文2. 状态转移方程: f(i, j) = f(i + 1, j - 1); i > 2, 考虑i = 0,i = 1边界3. 边界条件: f(i, i) = true; (i < n) f(i, i + 1) =

2022-02-07 23:15:23 2063

原创 求有向图起点0到终点n-1所有可能路径(深搜dfs)——C++

​二、题目分析2.1思路分析该题主要求有向图起点到终点的所有可能路径。我们以前学过图的遍历分为深度优先搜索(DFS)和广度优先搜索(BFS),该题可以采用图的深度优先搜索(DFS)进行解题。进行DFS时从起点开始搜索,直到遇到终点n-1结束当前轮次搜索,此时说明已经找到一条连通路径。当从起点到终点的DFS所有可能经过节点全部遍历完一次后,所有可能的路径结果也就出来了。2.2代码实现分析知道思路,那么我们开始代码实现分析。首先需要封装一个dfs()函数,该函数输入四个参数分别为图数组gra

2022-01-22 22:35:22 1660 1

原创 查找有序数组(二分法)(时间复杂度O(logn))——C++

查找有序数组指定元素,返回目标元素下标,如果不存在,则插入适当位置使数组仍然保持有序,时间复杂度为O(log(n)),该算法是基本查找算法,可以用二分法。下面是代码实现。class Solution {public: int searchInsert(vector<int>& nums, int target) { int size = nums.size(), left = 0, right = size - 1, mid = 0; while (l

2022-01-22 01:00:36 1643

原创 图的并查集QuickFind类总结——C++

图分为无向图、有向图、加权图。其中理解图论中一个重要概念是并查集。并查集有两个重要功能,分别是find查找根节点函数和union连通两个节点。传统的并查集实现算法效率较低,引申出两种优化版的并查集算法,分别是QuickFind类和UnionFind,本文主要介绍QuickFind类的实现。一、类QuickFind介绍1.1 类QuickFind功能和函数类QuickFind主要有两个重要函数,分别是findRoot()和unionNode()。函数findRoot()功能是查找某个节点的根节

2022-01-22 00:56:22 1078

原创 求俄罗斯套娃信封问题——C++

​如果前面掌握了最长上升子序列长度——C++题目,那么这题俄罗斯套娃信封问题将是非常简单,区别只在于在状态转移方程比较判断是将一维数组判断换成二维数组判断即可。

2022-01-14 23:46:42 672

原创 求最长递增子序列个数——C++

​由于上一篇博客已经分析过求最长上升子序列长度——C++的经典LIS问题,该题是求最长增长子序列个数,经过分析,这题也只是经典LIS(Longest Increasing Subsequence)问题的变种,也就是用同样的LIS框架,区别在于本体需要额外记录每个最长子序列个数。下面是具体实现思路。用dp[i]记录最长子序列长度maxLen,count[i]记录最长子序列个数,其中i表示数组的元素个数,0 <= i < n;如果求出前dp[i]和count[i]的i-1元素的值,则可以推导出:1.2代码实现

2022-01-13 00:14:33 2497

原创 求最长上升子序列长度——C++

拿道题目,第一思路是先分析。求数组最长上升子序列,也就是意味着要遍历整个数组中所有子序列,这时可以考虑是否可以用动态规划。由于动态规划知识,知道这是一题线性动态规划的题目,可以采用线性动态规划解法,即使经典的LIS(Longest Increasing Subsequence)。动态规划满足三个条件:状态方程、状态转移方程、边界条件,根据分析可知该题满足条件,下面是分析的动态转移方程:1.2代码实现分析由上面的状态转移方程和表格可知,需要求有n个子序列长度的LIS,就必须先求出第0个,然后退出第

2022-01-05 23:49:16 1688

原创 二叉树的序列化和反序列化——C++

总体解题思想为先用层次遍历存储包括空节点的每个节点,存储是每个节点都存储左右子节点,如果节点为空,则存储"#,",否则存储节点的值val,同时用逗号','分割每个节点内容,存储完后进行序列化string。反序列化则先按逗号','分割每个字符串为数组字符串vector<string> valStrArr,该valStrArr存储每个节点的值,包括空节点;然后遍历valStrArr,反向构建原始二叉树。反向构建二叉树时由于存储是按层次遍历存入的,所以反向遍历时也需要按照层次遍历依次将非空节点压栈和弹出栈。由于层

2021-12-15 23:07:36 2460

原创 二叉树层次遍历(队列法、每层打印)——C++

由上面题目可知,输入是一个一维数组,输出是一个二维数组。其中输入一维数组中存储的是节点元素,输出二维数组是每层节点关键字打印。故知道该题主要考察二叉树基本的层次遍历方法,需要打印出每层节点的关键字。二叉树的层次遍历实现思路是用一个队列记录每层节点,当记录第一层节点时,弹出第一层节点进行访问,访问的同时需要遍历对应节点的左右子节点压栈;当访问完一层节点时,此时改成节点所有左右子节点都已经压栈,由于先前循环弹出了第一层的n个节点,故当前队列只存储下一层所有节点,所以只需要将该队列大小保存,然后该轮循环中弹出这

2021-12-08 21:12:47 2754

原创 二叉树后序遍历(递归法和迭代法(非递归法))——C++

一、二叉树后序遍历后序遍历是先遍历左子节点left,在遍历右子节点right,最后遍历父节点parent,即遍历顺序:1.2 迭代法由于后续遍历如果按照正常迭代思路去实现将不好理解和实现,仔细观察下面前序和后续遍历顺序,可以发现一个规律:前序遍历:parent ——> left ——> right前序遍历: left ——> right ——>parent,将后续遍历逆序过来遍历,则:parent ——> right ——>left通过观察1和3可以发现,两者都是先遍历父节点,再遍历左

2021-12-04 22:50:25 1782 1

原创 二叉树中序遍历(递归法和迭代法(非递归法))——C++

1.2迭代法迭代法是采用非递归方法实现二叉树的中序遍历,主要利用数据结构std::stack来实现,利用栈std::stack的先进后出特性依次压入待访问的节点,然后依次按照中序遍历顺序弹出和访问节点,确保每个节点有且仅有一次访问。具体步骤如下:a1 先将所有父节点和左子节点依次压入栈;这样做的目的是为了先弹出左子节点,再弹出父节点,可以在弹出左子节点的时候进行遍历,同时处理右节点,比如将右节点压入栈,这样就实现了先访问左节点,然后父节点,最后右子节点。a2 然后弹出一个节点,进行遍历;此时弹出a

2021-12-04 20:45:55 1706 1

原创 二叉树前序遍历(递归法和迭代法(即非递归法))——C++

​一、前序遍历递归法前序遍历递归法主要是先遍历父节点parent,然后遍历左子节点,最后遍历右子节点,具体可以参考博客:二叉树基本知识点图文介绍(全网最简洁)_净无邪博客-CSDN博客。1.1具体解法如下:递归法的要诀是找到递归退出条件和按条件分步进行递归。具体解法比较简单,直接看代码和解释即可理解。​二、前序遍历迭代法迭代法,也成为非递归法解前序遍历时,需要依靠一个栈数据结构依次遍历每一个节点。实现方法为将每个节点压入栈。注意,栈是先进后出结构,所以需要先压入右节点,再压入左节点,弹出的时候才能先

2021-12-03 22:31:03 4119

原创 二叉树基本知识点图文介绍(全网最简洁)

​一、二叉树相关理论1.1定义二叉树是指树中节点的度不超过二的有序树。一棵空树或者一个节点的树也可以称为二叉树,二叉树其左右子树也各种一棵二叉树。1.2基本分类有满二叉树和完全二叉树之分。1.2.1满二叉树是所有非叶子节点都有且仅存在左右子树的二叉树。图一 满二叉树1.2.2完全二叉树是除最后一层非叶子节点外都有且仅存在左右子树,且最后一层叶子节点从左到右紧密排列,右边连续缺少若干个节点的二叉树图二 完全二叉树1.3性质性质1:二叉树第i层至多有(i>0)个节点

2021-12-03 22:03:33 2335

原创 桶排序算法——C++

​桶排序算法是“分治法”的典型应用,主要思路是先“分桶”(或建捅)再“合桶”。其中最关键的是“分桶”,这一步最佳的时将整个待排序数组均匀分布在每个“分桶”内,然后再对每个“分桶”内部进行排序,最后将所有排序好的“分桶”依次遍历输出即可。这个思路感觉跟“计数排序算法”和“基数排序算法”十分相识。“计数排序”是通过下标将待排序数映射到“一个桶”内,然后再逐个取出;而“基数排序”是遍历所有“基数”,然后对每个基数进行一轮“计数排序”,最后完成整个数组排序。“桶排序”的“分桶”过程也是需要将待排序元素映射到“桶”

2021-12-01 23:58:31 1633

原创 基数排序算法——C++

​基数排序的主要思想是选择多位基数依次进行排序,利用每次排序后还是相对有序,也就是稳定排序性质,依次比较完所有基数后,完成整个数组排序。其中,每次比较基数比如对整数进行排序时可以采用计数排序,因为整数位数有限并且每个位上的数值范围是0-9,所以最适合采用优化后计数排序对每个基数进行排序。时间复杂度为O(n + m),空间复杂度为O(n + m),其中n为数组个数,m为数组最大值位数。基数排序跟数组规模有关,假如规模很大的话,不一定比快速排序更优,故需要就具体数据模块进行分析。一、代码实现分

2021-11-26 23:53:11 2605 3

原创 计数排序算法——C++

​计数排序是时间复杂度为O(n + m)的算法,空间复杂度为O(n + m);算法思想跟散列表哈希hash有些类似,主要是利用一段有序数组计算对应元素的下表个数,然后依次输出有数组元素进行排列。基本计数排序是不稳定算法,但是优化后计数排序是稳定算法。本文主要讲解基本计数排序和优化后计数排序。使用条件:数组必须是整数或者能全部映射为整数,数组所有元素必须在有限较集中范围;一、具体实现步骤1.计算原始数组的最大值max和最小值min范围,然后创建一个长度为max--min+1的排序数组sortAr

2021-11-24 23:48:56 3189 4

原创 希尔排序算法——C++

希尔排序是第一个在空间复杂度为O(1)条件下,将数组排序的时间复杂度降到O(logn^2)的算法,具有巨大历史意义,为后面的堆排序,快速排序提供了极大的启发和参考。故希尔排序时间复杂度为O(logn^2),空间复杂度为O(1)。希尔排序是对插入排序的一种改进算法,由于插入排序只在数据较少且基本有序时效率才是最佳的,故希尔排序原理将整个数组分为多个分组,然后分别进行排序。分组的其中一个原则是两个分组的元素尽量间隔较远,以消除逆序对,提高排序效率。由上一篇的堆排序可知,排序本质是对逆序对的消除,堆排序就

2021-11-18 00:01:58 3182 6

原创 插入排序算法——C++

插入排序算法主要是将待排序数组依次插入有序数组中,时间复杂度是O(logn^2),空间复杂度为O(1);下面是代码实现步骤:1.先假定数组左边第一个元素是有序的void Sorts::insert(vector<int>& nums){ if (nums.size() <= 1) return; ......}2.依次遍历待排数组的右边第二个元素到最后一个元素void Sorts::insert(vector<int

2021-11-13 18:06:26 1972

原创 求数组中的逆序对(时间复杂度为O(nlogn))C++代码实现

求数组中的逆序对,要求时间复杂度为O(nlogn),空间复杂度O(n)题目如下:(注:原题来自力扣的剑指 Offer 51. 数组中的逆序对)在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5思路分析:1.如果不考虑时间复杂度限制,则可以考虑暴力解法,即用双层循环即可遍历整个数组完成逆序对统计。int reversePairs(vector<int&g

2021-11-11 00:17:13 1037

原创 归并排序算法(优化版)——C++

关于归并排序的介绍可以参考这边博客:归并排序算法(经典返回变量版)——C++_净无邪博客-CSDN博客。本文主要是对递归排序进行优化。由于经典版本返回临时变量的归并排序效率比较低,需要多每次创建临时空间进行优化,使用一个固定内存空间,这样可以减少每次创建和销毁内存空间的时间消耗,由于这部分很费时间,所以优化效果是比较明显的。优化版跟基本版的区别主要区别如下:1.归并函数原来是入参两个数组,优化后入参为两个待排序数组合并在一起的起始和截止位置,如下所示:void merge1(vector&

2021-11-07 00:36:02 1126

原创 归并排序算法(经典返回临时变量版)——C++

归并排序算法思想主要是将两个有序数组合并成为一个有序数组,其关键点采用“分治思想”,“分”是二分法,将无序数组分割成为一个个有序数组,然后通过“治” 将两个有序数组合并成为一个有序数组。时间时间复杂度为为O(nlogn),空间复杂度是O(n)的常量级临时变量,是稳定排序算法。归并排序主要实现思想:采用“分治思想”,先“分”将整个无序数组先左边递归,再右边递归,类似二叉树先序遍历方法,将数组分为一个个有序数组;然后通过“治”将一个个有序数组通过合并merge方法组合成一个有序数组;1.“分”ve.

2021-11-06 22:06:56 612 2

原创 堆排序算法——C++

堆排序分为大顶堆排序和小顶堆排序,两者都是平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2),空间复杂度是O(1),是不稳定排序算法。大顶堆主要实现思想:1.初始化构建大顶堆void initMaxHeap(vector<int>& nums);2.将大顶堆的根(最大值)交换到数组最后面,然后将待排序数组长度减一后重新构建大根堆void buildMaxHeap(vector<int>& nums, int waitSortNod.

2021-10-30 00:12:34 290

原创 快速排序算法——C++

快速排序平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2),空间复杂度也是O(nlogn),是不稳定排序算法。主要实现思想:通过分区,首先选取基节点,基节点满足左边数据小于基节点,右边数据大于基节点;当完成一趟分区后,取得中间值,对左边数据同样进行分区满足“基节点左小右大”性质,对右边同样进行分区满足“基节点左小右大”性质,一直递归,直到左边数据哨兵指针大于等于右边哨兵指针即为结束条件。void Sorts::quick(vector<int>& nums, int

2021-10-27 23:57:30 346

原创 VS2019配置ffmpeg4.4动态库和Qt5.9详细图文教程

博主的环境是win10 64 + VS2019 Debug X64 + ffmpeg-4.4-full_build-shared + Qt5.9.9(QtCreator4.11.0)1.1下载ffmpeg-4.4-full_build-shared.7z1.2下载后解压,将bin目录下所有*.dll拷贝到可执行目录下,同时include和lib拷贝到工程目录下,如下图所示:1.3配置VS2019工程项目【项目】——【属性】——【C/C++】——【常规】——【附加包含目录.

2021-10-03 22:41:32 1379 1

原创 小师妹问沃什么是可执行程序?(全网最简洁,必看,错过后悔终生!!!)

相信很多同学知道Windows下的可执行程序是*.exe,但是除了*.exe之外,Windows下动态库*.dll和*.lib也是可执行程序。不过,小湿妹问沃的是什么是Linux下的可执行程序? 为了不让小湿妹伤心,师兄沃再次拿起《程序员的自我修养》第三章肝了一晚上,呕心沥血才完美回答出小湿妹的问题,回答让小湿妹十分满意,对师兄好感爆棚。好了,吹牛到此为止,正经脸(咳咳咳 ^_^),接下来让我们来看看师兄回答了什么,让小湿妹万分满意?一、目标文件格式 ...

2021-09-01 23:54:48 1983 1

原创 C/C++程序编译成可执行程序步骤图文源码详解

一个C++程序被编译为目标程序的过程中经历了四个部分,分别是预处理、编译、汇编、链接。下面将通过一个简单的C++代码分别执行预处理、编译、汇编、链接四个步骤后的结果和基本原理讲解。注意:博主是在ubuntu20.0下编译和运行,g++版本是9.3.0一、一个简单的C++代码下面是一段简单的C++代码Test1.h#ifndef TEST1_H_#define TEST1_H_struct Test1{ Test1(); int getVar() co

2021-08-27 23:59:03 3701

原创 选择排序算法——C++

选择排序时间复杂度是O(nlogn),空间复杂度是O(1),是不稳定排序算法。主要实现思想就是通过双层循环,每次外层循环时,对内层进行遍历寻找最大值下表保存起来,内层循环结束后跟最后一个值交换。也就是每次遍历数组,然后将最大值交换到数组最后面。下面是遍历数组双层循环的套路代码:for (int j = nums.size() - 1; j > 0; --j) for (int i = 0; i < j; ++i)下面是实现选择排序算法代码Sorts.h#pragm

2021-08-11 22:39:03 534 4

原创 冒泡排序算法C++

冒泡排序算法比较简单,就是从左到右两两比较大小,比如升序排序,则把较大元素放到后面,第一轮结束后,开始第二轮比较排序;第二轮到第n-1个元素,一只到第n-1轮到比较最开始的两个元素则终止比较,下面实现代码:#include <iostream>#include <vector>using namespace std;class Sort {public: void bubble(vector<int>& nums) {

2021-07-28 23:07:06 757

原创 二分法查找有序数组中指定元素 c++

本文主要总结常用二分法中,查找一个有序数组中某个元素,条件如下:1.如果在数组中找该元素,则返回该元素的位置下标2.如果在数组中没有找到该元素,则返回应该插入的位置下标示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0#include <iostream>#include <nume.

2021-07-01 00:23:58 2237

原创 蛇行字符串解题代码C++

一、题目描述输入一个字符串(不含空格), 请寻找输入中包含所有蛇形字符串。蛇形字符串定义:1.蛇形字符串由连续字符对组成,其特点如下:1.1 字符对定义:字符对由同一字母的大写和小写组成(前大后小)。如:Aa,Dd;1.2 蛇形字符串中包含的字符对,必须是连续字母,并按照字母顺序排序。如:AaBbCc或OoPpQqRrSs;2.从输入中寻找字符组成蛇形字符串(字符顺序不限),符合规则:2.1 每次寻找必须是最长的蛇形字符串;2.2 使用过的字符不能重复使用;例: 输入SxxsrR^AaSs

2021-06-06 01:17:37 1191

原创 OJ系统输入转为字符串char*或者std::string处理(力扣Leecode和牛客网 C++,std::getline,cin.getline)

起始主要用到输入函数std::getline(…)或者cin.getline(…)。由于std::getline(…)支持std::string输出和cin.getline(…)输入是char*,所以本文主要讲std::getline(…)。一、std::getline原理和用法1.1 std::getline参数解析std::getline有两个版本,分别如下代码所示: // (1)istream& getline (istream& is, string& str,

2021-06-05 00:59:34 356

原创 C++字符串数组转整形数组vector<int>(vector<int>& strsToIntVector(const string& str))

本文主要总结一个C++字符串数组转整形数组的函数void strsToIntVector(const string& str, vector<int>& vs, const string& sp =" "),即```cppvoid strsToIntVector(const string& str, vector<int>& vs, const string& sp =" "){ ... }```# 一、函数原理和用法## 1.1函数参数详解```cpp/* @para1 str : 待分割

2021-06-04 23:57:57 1560 1

原创 《STL 源码剖析》——__type_traits源码剖析

迭代器iterators不仅可以萃取iterator类型,还可以萃取type_traits是一种抽象的设计概念,在《Design Patterns》书中对迭代器模式定义为:提供一种方法,使之能够依序访问某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。可以参考博主之前写过的一篇迭代器模式文章C++设计模式——迭代器模式(iterator pattern)。可以看出,迭代器是一种行为类似智能指针(smart pointer)的对象,主要功能是对内容进行解引用和成员访问,因此设计迭代器主要

2021-04-04 17:27:51 507

原创 《STL 源码剖析》——迭代器iterators和traits编程技法

空间配置器alloc主要功能是对内存进行申请和初始化。其中申请内存采用两级配置器,初始化内存则用五个全局函数。其中两级配置器分别为第一级配置器(__malloc_alloc_template )、二级配置器(__default_alloc_template );五个函数(也可以说是内存处理的工具)分别是用于构造的construct()、用于析构的destruct()、uninitialzied_copy()、uninitialzied_fill()、uninitialzied_fill_n()。一般不会使

2021-04-04 15:34:25 325

原创 《STL 源码剖析》——空间配置器alloc

栈和队列是应用最多的数据结构之二,有数组实现和链表实现两种方式。当需要对容器做出限制,只允许一边插入和取出数据时,则需要用到栈。下面将总结数组实现的栈和阐述其原理。一、线性表——栈Stack1.1栈Stack定义栈是一种特殊的线性表,其插入(也称为入栈或压栈)和删除(也称为弹出或出栈)操作都在表的同一端进行;该插入和删除的端口称为栈顶(top),另一端称为栈底(bottom)。1.2栈的基本运算1.2.1基本运算(1) 初始化(构造一个空的栈)(2) 计算栈长度(栈中节点个数)(3) 插入节

2021-04-03 23:59:08 1221 7

自定义按钮,鼠标移入、移出、摁下,分别改变按钮图标样式原理和代码总结(上图标下文字、hover、QSS样式表、QPushbutton)1.zip

本代码主要总结一个自定义按钮,该按钮布局是上面图片下面文字,其中,可以自定义样式,当鼠标分别移入、移出、摁下自定义按钮时,自动改变自定义按钮中的图片。可以任意设置图片中文字和图片位置、以及鼠标移入、移出、摁下按钮时要在自定义按钮中显示的图片。编译环境是Qt5.9.4+MinGW32+Creator4.5.0。下面博客是对源代码的原理讲解和代码运行效果图文示例讲解:https://blog.csdn.net/naibozhuan3744/article/details/102690227

2019-10-22

Qt5自定义状态栏QStatusBar外观(背景)和状态栏基本用法(显示普通消息、临时消息、永久消息).zip

这是一个Qt自定义状态栏基本用法,包括自定义状态栏的外观形状,三种显示普通消息、临时消息、永久消息用法和图文示例,具体的原理详细可以参考博主博主这篇博客:https://blog.csdn.net/naibozhuan3744/article/details/102642222。编译环境:Qt5.9.4+QtCreator4.5.0+MinGW32

2019-10-19

Qt 2D绘图函数QPainter类基本用法(绘制图片、直线、填充颜色的矩形).zip

本资源主要用QPainter类绘制直线、矩形、图片基本用法,可以用于自定义QWidget和重新绘制QWidget边框,也就是用这个代码类,可以自定义自己的边框和任意背景形状。原理讲解博客地址:https://blog.csdn.net/naibozhuan3744/article/details/102630262。编译环境:QtCreator4.5.0+MinGW32

2019-10-19

Qt菜单QMenu和菜单栏QMenuBar基本用法和自定义菜单用法总结.zip

该代码总结了三种QMenu用法,有基本菜单用法,有两种自定义菜单,编译环境是Qt5.9.4+MinGW32+Creator4.5.0编译器,具体的原理讲解可以参考博主博客:https://blog.csdn.net/naibozhuan3744/article/details/102616146

2019-10-17

用Qt实现QQ好友列表界面伸缩功能(完全一模一样)(伸展和收缩、抽屉效果、类似树形控件)(鼠标划过QSS效果).zip

总结用Qt的自定义按钮和QWidget界面实现QQ好友列表的界面伸展和收缩功能,以及鼠标滑过、鼠标单击的QSS样式表效果。原理讲解博客地址如下:https://blog.csdn.net/naibozhuan3744/article/details/102537152。编译环境为Qt5.9.4+QtCreator4.5.0+MinGW32

2019-10-13

Qt自定义按钮,实现图片、文字内容位置任意布局(上图下文字、左图又文字),以及样式表设置(鼠标滑过、单击效果).zip

总结在一个自定义的按钮。该按钮可以任意摆放图片和文字位置和距离,同时可以用QSS设置按钮内图片、文字、整个按钮的样式表效果,也就是说,可以实现鼠标划过、鼠标选中等样式表,跟原来QPushbutton的样式表效果一模一样!博客原理详解和效果图地址:https://blog.csdn.net/naibozhuan3744/article/details/102536188。编译环境为:Qt5.9.4+QtCreator4.5.0+MinGW32

2019-10-13

Qt/C++抽象类和纯虚函数讲解示例源代码

该资源是博主博客的源代码,博客上有详细讲解Qt/C++关于纯虚函数和抽象基类原理讲解和示例用法解释,博客地址如下: https://blog.csdn.net/naibozhuan3744/article/details/94488200 其中编译环境为QtCreator4.5.0(qt5.9.4),用MinGW32位编译器编译。

2019-07-02

winhex1516(二进制文本查看工具)

本工具主要可以打开二进制文本工具,常用物理磁盘、逻辑磁盘进行二进制数据分析。博主用该工具主要分析定位fat32文件系统的某个文件,具体的博客教程地址:https://blog.csdn.net/naibozhuan3744/article/details/89670949

2019-04-29

基于Qt的C++架构实例(模型MVC在C++后端管理系统应用)

本资源是一个完整的Qt5.9Creator工程代码,主要功能是总结一个Qt下的MVC架构。该架构主要分为控制层、UI界面层、模型层,具体的理论讲解,可以参考博主这篇博客: https://blog.csdn.net/naibozhuan3744/article/details/82493728

2018-09-07

Qt5.9自定义标题栏源代码

本源代码是用Qt5.9的Creator编译和构建,主要功能是实现自定义标题栏,而屏蔽系统自带的标题栏。具体的讲解和用法可以参考我的博客:https://blog.csdn.net/naibozhuan3744/article/details/81120544

2018-07-19

adb动态库资源

本资源主要是adb动态库,win7 64位系统通过调用adb动态库,可以对安卓手机进行操作和管理。动态库用法,参考我博客:https://blog.csdn.net/naibozhuan3744/article/details/79667920

2018-03-23

Qt5.9Creator自定义信号实例(SignalTest)

本资源主要是用Qt5.9Creator产生一个自定义的是信号例子,该例子对应的讲解在我的CSDN博客:http://blog.csdn.net/naibozhuan3744/article/details/79221060

2018-03-05

基于Qt5.9Creator的一个简单socket通信实例(C++语言,win7 64系统)

本资源主要是用Qt5.9Creator写的一个socket通信的实例,采用的协议是TCP/IP,包括客户端和服务器。经过测试,在局域网和本机电脑上都可以正常通信,具体的教程在本人的博客地址里面:http://blog.csdn.net/naibozhuan3744/article/details/79192069

2018-01-29

登录界面代码(连接MySql数据库进行用户名和密码验证_Qt5.9Creator)

这是一个用Qt5.9Creator写的登录界面代码。该代码的功能是在界面上输入用户名和密码,点击登录按钮后。程序连接远程服务器MySql5.7.17,通过遍历远程服务器的登录表,查找是否存在一组登录界面的用户名和密码,如果有,则弹出登录成功编辑框,并且进入主界面,如果没有则弹出用户名或密码错误编辑框,同时清空登录编辑框。

2018-01-03

libmysql_win32(32位libmysql.dll)

libmysql.dll是32位系统的,不是64位。我数据库版本是MySql5.7.17,在Qt5.9亲自测试,是可用的。

2018-01-02

基于MFC的串口COM扫描程序

本代码为串口COM的扫描函数,只要将资源中的头文件和源文件加入工程,然后直接调用函数就行。函数的功能是通过按钮,自动扫描PC机中的COM口,然后将所有COM口号添加入组合框CheckBox控件里面。

2017-11-29

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

TA关注的人

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