- 博客(66)
- 收藏
- 关注
原创 QML自定义电池状进度条
百分比显示保留两位小数,通过iValue的数值来显示当前进度,注意为了保留小数总值取的是10000,所以你的iValue值也要乘上100。iModel:表示进度小方块的数量,该控件的长度与此有关,无需再次设置。iValue:当前进度,为整数(记得放大100倍)cContentColor:表示进度的小方块颜色。cTextColor:显示进度百分比的文字颜色。cBorderColor:进度条外框的颜色。
2023-10-24 21:28:38
274
原创 手写SVG图片
这个意思其实是确定一些点,让系统沿着这些点画线(L指画线),这段的意思是沿着(0,2)、(2,0)、(17,15)、(32,0)、(34,2)、(19,17)、(34,32)、(32,34)、(17,19)、(2,34)、(0,32)、(15,17)这些点,用颜色黑色fill="#000000来填充闭合的路径,因为这个"X"是有宽度的,所以描点的时候要注意把宽度考虑进去.这里只是展示了最简单的画线,还有很多其他的绘制读者可以自行去了解.新建文本文档,将以下代码复制进去,修改后缀名为.svg,保存。
2023-10-23 20:00:08
417
原创 QTableWidget表格中表示开关状态
在表格中放置QWidget控件,再在QWidget里绘制圆形,需要快速实现一个自定义的QWidget.
2023-03-22 12:00:00
228
原创 位运算的奇技淫巧-位运算分治
对一个32 位无符号整数,如何颠倒它的二进制位?一个朴素的办法是,从低位到高位,逐位使其二进制数就位。uint32_t reserveBits(uint32_t n) { uint32_t ret = 0; for (int i = 0; i < 32; i++) { ret |= ((n >> i) & 1) << (31 - i); } return ret;}对第i位,使用(n >> i) &
2021-05-30 09:34:56
753
2
原创 由Topk到STL源码(快排优化)
一切从一个力扣题开始:最小的k个数TopK:输入整数数组 arr ,找出其中最小的 k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。看到有人说STL提供了算法可以解决这个题,自己实现了一下,于是有了这两种解法。秒杀法调用STL提供的nth_element方法,该方法让第 n 个位置上的元素就位,且所有在位置 n 之前的元素都小于或等于它,所有在位置 n 之后的元素都大于或等于它。class Solution {public: vector
2021-04-14 15:21:06
241
原创 深信服一面面经
深信服一面-C++开发工程师 云计算/网络安全方向-校招(大概半小时不到)数据结构:多态是怎么实现的?继承和重载有什么关系?数组和链表有什么区别?数组里找第k个最大的数有什么方法?(堆排序,没想出来,只说了一个排序,平均最快nlogn)堆排序是怎么排序的?(承接上面的问题,给我提示,但是我完全没意识到)二叉排序树为什么要平衡?new和malloc的区别?fock函数在调用时进行了哪些工作?快速排序是怎么排的,有序和无序的情况哪个速度慢(有序),为什么?(不知道…)那怎么优化呢?(先遍历
2021-03-31 12:50:13
284
1
原创 字节跳动一面面经
字节跳动一面-游戏研发工程师-校招(用时一小时):数据结构:讲一下虚函数。构造函数和析构函数是否可以用虚函数?为什么?虚函数表在继承中如何是作用的?具体讲一下菱形继承是怎么继承的。用过哪些STL容器?讲一下vector和set的区别。讲一下右值引用。用过vector的emplace_back吗?讲一下完美转发。完美转发是如何实现的?智能指针用过吗?有哪些智能指针?讲一下weak_ptr。shared_ptr是怎么实现共享的(说的引用计数用静态数据成员),不对,再想想(没想出来)。操作系
2021-03-30 19:24:44
471
原创 读那些大牛的代码我们能得到什么?
读那些大牛的代码我们能得到什么?之前在学STL的map容器,map容器的底层实现就是变种红黑树.有些好奇标准库是怎么写的,就去追根溯源了一下,然后找到了map和xtree里面,开始就看到了一个很奇怪的代码:// map standard header#pragma once#ifndef _MAP_#define _MAP_#ifndef RC_INVOKED#include &l...
2020-03-29 17:31:14
242
原创 C++异常
C++异常异常无处不在!尽管程序是你设计的,但是却不一定按你的设想运行.面对随时有可能出现的异常情况(俗称程序跑飞了),你该如何应对?C++提出了异常机制.什么是异常?异常是一种程序控制机制,与函数机制互补.函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现"意外"时中断当前函数,并以某种机制(类型匹配)回馈给隔代的调用者相关的信息.在我以前的文章里...
2020-03-27 16:00:57
276
原创 原型模式
原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.理解在你新创建一个实例时需要消耗较多的资源,并且希望保存已经存在的实例的状态,这时可使用原型模式.被复制的原型类需要实现拷贝构造函数,常常和工厂模式搭配使用.和单例模式相冲突.优点可以不再进行重复的操作以保证新的实例与已经存在的实例有相同的状态.缺点逃脱了构造函数的限制,这使得即使构造函...
2020-03-26 17:03:08
136
原创 享元模式
享元模式(Flyweight)运用共享技术有效地支持大量细粒度的对象.优点大大减少对象的创建,避免了大量重复的对象的出现,减轻系统的内存负担,使效率提高.缺点需要考虑外部状态和内部状态的划分,否则将使得线程不安全.理解这里将会用到"池"的概念,创建对象之前将会搜索池,如果不存在可用对象,则会创建新对象并将其加入"池",否则将会使用已经存在的对象,此时新的对象事实上可以看成已经存在...
2020-03-25 13:23:19
124
原创 观察者模式
观察者模式(Observer)当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.理解如同在动物园看动物,当动物的行为、状态发生改变时,所有的游客(观察者)都自动收到信息.常用于通知类型的设计.优点观察者和被观察者是抽象耦合的,依赖关系被弱化.缺点在规模庞大时,让所有观察者接收到更新通知将会花费很长的时间.实现在用户使用软件,软件公司发布了软件的一个新版本,...
2020-03-24 20:08:15
134
原创 工厂模式
工厂模式(Factory)定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行.优点只要知道名称就可创建对象,可拓展性好.缺点在实现类并不复杂时,使用该模式会造成代码冗余.抽象类图理解实例化这个操作,不应该公开的进行,用new直接创建的方式就是针对实现编程,违背了设计模式原则中的依赖倒转原则.并且很多时候,创建一个类所做的初始化工作不...
2020-02-20 15:31:10
102
原创 虚函数表与继承再到多态
虚函数表虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址.类中虚函数的存储借助虚函数表,请看代码.#include <iostream>using namespace std;class Father {public: virtual void function1() { cout << "调用了Father的方法1" << ...
2020-02-04 23:33:42
178
原创 策略模式
策略模式(Strategy)定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.理解这里策略与我们平时的意思一致,即可以实现目标的方案集合,在众多方法中选择一种使用.常用于替代if-else,但并非所有情况下都可替代.优点可拓展性良好.策略(Strategy)在运行时装载代码,从而解决了有时候支持不使用的方法也是一种性能负担的问题.缺点策略类都需要将方法置为public...
2020-01-16 17:07:50
124
原创 模板模式
模板模式(Template)定义一个操作中的算法的骨架,并将一些步骤延迟到子类中,这使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.理解如同我们日常生活中"模板"的意思,做一个标准化的流程,其中一些地方留空,后来者可以根据自己的需要填空.就像试卷,答题的格式已经固定了,你所要做的就是在其中挖空的地方填空,并且每个人填的内容可能都会不一样.优点不变部分被封装,使得可变部...
2020-01-16 16:46:02
145
原创 友元、运算符重载
友元友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend类的三种访问权限从:大家均可访问(public)到仅子类可访问(protected)到类外均不可访问(private).这三种访问范围其实是有漏洞的,并没有考虑到一种情况,比如我现在让类内的数据部分公开,即部分函数/类可用,这时类的三种访问权限任何一种都无法满...
2020-01-13 19:01:50
477
原创 C++中对文件的操作
对文件的操作学C的时候我们就接触过如何读写文件,C++中存在C++风格的文件读写,同时也支持C风格的读写文件.这是IO类库的基本结构,箭头表示该类从何处继承.文件的打开模式标记代表了文件的使用方式,这些标记可以单独使用,也可以组合使用,组合使用时,用|将其连接模式标记适用对象作用ios::inifstream、fstream打开文件用于读取数据。如果文件不存在,...
2019-12-21 11:56:05
570
原创 优先队列实现哈夫曼树
哈夫曼树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树的建立过程:这里使用STL容器适配器priority_queue实现哈夫曼树.结构体定义提示:能存储字符有字符的频率(优先级)有左子结点和右子结点t...
2019-11-11 19:28:10
3443
原创 二叉搜索树
二叉搜索树二叉搜索树一般用于查找,查找思路类似于二分查找,平均每次能排除一半的结点,所以它的平均效率为二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树...
2019-11-05 21:51:38
230
原创 栈
栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。顺序栈顺序栈是用数组实现的栈,结构体定义提示:应有栈顶和栈底...
2019-10-30 10:40:41
145
原创 堆实现优先队列
堆实现为什么要使用堆实现优先队列?在前面讲了用链队实现优先队列,其思想是插入元素时按普通队列入队,在删除元素(出队)时按优先队列的性质删除.那么就还有一种方式,即插入元素时按优先队列的方式插入,删除时按普通顺序队列的方式删除.那就是用堆实现优先队列!由于前面已经写过堆的实现,这里不再重复造轮子,读者可以自己改写实现优先队列,我们使用容器适配器.堆的实现首先我们需要一个容器,vector容器...
2019-10-26 22:20:16
730
原创 堆
堆堆(heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值.堆总是一棵完全二叉树.根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆.这里我们以最大堆为例来讲堆.堆的实质就是树,不过它有些特殊,它是用数组存放的树!堆的父结点和其左右子结点有何关系?如果父结点为i,...
2019-10-25 10:12:47
136
原创 循环队列
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。逻辑结构如下:存储结构如下:结构体定义提示:应有数据域有队头和队尾指针typedef struct { int data...
2019-10-17 14:21:01
226
原创 任务队列
结构体定义typedef struct TQNode { int id; void (*handle)(void); TQNode *next;}TQNode;typedef struct { TQNode *front; TQNode *rear;}Queue;初始化bool initQueue(Queue* &q) { q = new Queue; if ...
2019-10-17 12:50:26
2274
原创 链队实现优先队列
首先,什么是优先队列?普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征.简单来说,每次出队,优先级最高的先出,如果优先级相同,按普通队列方式(先进先出)出队.结构体定义提示:应有存放优先级的变量(本文中,数...
2019-10-10 12:45:05
513
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人