自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT配置可执行文件和缓存文件的位置

Qt项目更改缓存文件的位置,一般是直接和代码文件放一起的,比较混乱,这样就能把这些缓存文件都放到一个文件夹中。

2022-11-11 14:01:03 1243

原创 sql查询的性能优化

1.尽量不要使用limit offsetrowid并不是所有数据库都有的

2022-11-01 20:31:16 77

原创 单例模式4种实现方式C++

假设在reorder的情况下:线程1走到赋值,但还没调用构造的阶段,而线程2进来判断m_instance,此时它已经被复制 所以不为空,这时候线程2就直接返回m_instance,但事实上它还没构造出来……因为编译器优化,指令的执行顺序可能reorder(CPU执行指令的层次,而且线程是在指令层次抢时间片的) ,可能变成这样:分配内存->赋值->调用构造(理想应该是:分配内存->调用构造->赋值)这样,编译时在编译的时候就知道,这个变量的整个赋值过程不能reorder,需要按照常规的流程走。...

2022-08-21 11:41:39 951

原创 navicat远程连接不了阿里云服务器上的mysql

第一步:在阿里云服务器中开放3306端口第二步:修改配置,bind-address改为0.0.0.0第三步:登录mysql修改系统表user最后添加远程访问权限use mysql;Grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;flush privileges;还不行,重启一下mysql服务:service mysql restart...

2022-05-29 17:45:43 724

原创 Sqlite的rowid

sqlite3的每个表都有一个隐藏列:rowid,是一个64位的整数select rowid from table如果你在表中设置了主键(integer类型),此时,主键即rowid(也可以叫索引)使用rowid查询一般速度都会比较快rowid的一些规则:(1)从1开始,自增长的(2)在取值范围内,每次都比记录的最大rowid + 1(3)超出范围,随即在之前删除的rowid中选取一个使用场景:假设表中有一个主键列,执行insert语句时,想使用rowid(和rowid的规则)作为主键使用

2022-05-17 22:40:48 2187

原创 QList原理

QList不同于std::list,QList根据容易元素类型的不同,采用不同的数据结构来处理,从而节省内存、提高效率。QList的模板参数T大概分为两种情况:(1)如果T占用的内存较多 或 T占用内存少但有构造函数QList将每个元素存放在堆上,再维护一个指针数组,指向这些元素。所以可以根据索引快速查找元素,但删除操作速度较慢。(2)如果T是一个指针类型 或 T所占字节数小于指针所占字节数QList将T直接存放在指针数组中...

2022-04-10 16:17:25 705

原创 c++11 智能指针shared_ptr、weak_ptr

1、概述shared_ptr:强智能指针,可以改变资源的引用计数weak_ptr:弱智能指针,不会改变资源的引用计数2、问题强智能指针相互循环引用问题,会导致内存泄漏,如下:解决方法定义对象的时候使用强智能指针,在引用对象的地方使用弱智能指针...

2022-03-13 22:36:43 3357

原创 c++11 lambda表达式底层

lambda表达式也叫匿名函数或闭包,如果这个函数只使用不频繁,或者是不想起名,可以使用匿名函数。lambda式可以临时制作出回调函数、接口适配函数或语境相关函数的特化版本以供一次性使用。// 闭包可以复制 auto fun = [ capture_list ](parameter_list) -> return type {

2022-03-13 16:57:48 1894 5

原创 Qt事件处理机制

1.Qt事件简述Qt的事件主要分为两种:操作系统产生Qt应用程序产生首先,所有的Qt事件均继承抽象类QEvent,其描述程序内部或外部发生的动作。任意的QObject对象都具备处理Qt事件的能力。在发生事件时,会产生一个QEvent对象,这个对象会传递给当前组件的event( )函数。如果当前组件没有安装事件过滤器,则会将QEvent对象发放到相应的xxxEvent( )函数中。不同的QEvent对象会有各种各样的属性,比如:鼠标按下的属性So,总体的流程如下:Qt的main() 函数

2022-02-20 21:25:57 1781

原创 SQL基础知识笔记整理

一、检索数据select1.检索单个列2.检索多个列3.检索所有列4.检索不同的行:select distinct 字段1 from 表名select distinct 字段1,字段1,字段1 from 表名select distinct * from (错误)5.限制结果:select * from 表名 limit 5 #返回不多于5行select * from 表名 limit 5,3 #返回从行5开始的3行(行索引从0开始)6.完全限定的表名二、排序检索数据orde

2021-09-28 00:15:21 630

原创 Qt设置文本省略样式

void ZqyFunctionConfigWdt::setLabelElidedText(){ QString text = ui->label->text(); QFontMetrics metricsLabel(ui->label->font());//比较文本的长度和控件的长度,如果文本长度大于控件的长度 if(metricsLabel.width(text) > ui->label->width()) { //

2021-07-30 22:18:32 554

原创 Qt动态样式

如果想要一个控件在不同的情况下使用不同的样式,一般直接setProperty是没有效果的。需要在setProperty后再加上unpolish和polish刷新一下,顺序不能反。ui->label->setProperty("lbStyle", "red");ui->label->style()->unpolish(ui->label);//删除旧样式ui->label->style()->polish(ui->label);//设置新样式

2021-07-30 22:13:02 432

原创 Qt中QTimeEdit、QDateEdit、QDateTimeEdit样式表

1.1 QTimeEdit 样式表效果图:qss代码:.QTimeEdit[timeEditStyle="commom"]{ min-height:24px; max-height:24px; border-radius:2px; border:1px solid #cccccc;}.QTimeEdit[timeEditStyle="commom"]:hover,.QTimeEdit[timeEditStyle="commom"]:focus{

2021-07-30 22:04:24 6134 1

原创 力扣136.只出现一次的数(异或运算)

异或是一种逻辑运算,相同为0,不同为1。在C++语言中,使用 ^ 符号表示异或运算符。异或运算的时候只能使用二进制位运算,所以需要先将十进制位转换成二进制位。力扣136 只出现一次的数给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?方法1、暴力法(时间复杂度O(n^2))方法2、哈希法(时间、空间复杂度均为O(n))方法3、排序法(时间复杂度O(nlg(n)))方法

2021-07-26 22:03:19 135

原创 Qt setMouseTracking函数的作用

设置窗体是否追踪鼠标this->setMouseTracking(true);//默认值为false该函数默认是不追踪的,不追踪的情况下 : 至少有一个鼠标按键按下才会响应鼠标移动事件。那么如果你在鼠标悬停的时候就想响应鼠标事件(获取鼠标位置信息等)的话,就需要将函数设为true。...

2021-07-24 17:05:36 483

原创 TCP协议

面试常见问题怎么确保可靠性?停止等待协议和连续ARQ协议流量控制拥塞控制的方法?为什么要三次握手,而不是两次握手?为什么要四次挥手?为什么是2MSL?TCP特点TCP是面向连接的传输控制层协议。因为应用程序在使用TCP协议之前,必须先建立TCP连接;在传输数据完成后,必须释放已经建立的连接。TCP连接是点对点的。TCP提供可靠交付的服务。通过TCP连接传输的数据,无差错、不丢失、不重复,并且按序到达。TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TC

2021-03-31 21:36:43 1288

原创 三步问题(C++)

题目描述三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。代码实现解法1//时间复杂度o(n) 空间复杂度o(n)class Solution {public: int waysToStep(int n) { vector<int> dp(n+1,0); if(n<3) return n;

2021-03-28 20:07:54 375

原创 746 使用最小花费爬楼梯(C++)

题目描述数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。思路只要在当前位置的前两个中选择一个最小值+当前位置的值,就是每个阶梯所花费的最小值代码实现class Solution {public: int minCostClim

2021-03-28 19:19:11 230

原创 青蛙跳台阶的问题(C++)

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路首先定义一个数组记录那些需要重复计算的值然后找出数组之间的关系式找出初始条件代码实现int numWays(int n){ if(n<=1) return n; int dp[n+1]; // 定义一个数组记录重复使用的数据 dp[

2021-03-27 17:39:00 636

原创 按二进制数中1的个数分类

题目描述:小A刚学了二进制,他十分激动。为了确定他的确掌握了二进制,你给他出了这样一道题目:给定N个非负整数,将这N个数字按照二进制下1的个数分类,二进制下1的个数相同的数字属于同一类。求最后一共有几类数字?要求输入例子:158 2 5 7 3输出例子:3代码实现#include<iostream>#include<vector>#include<set>#include <algorithm>using namespace std

2021-03-27 17:37:18 82

原创 希尔排序(C++)

希尔排序是插入排序的一种高级变形,当数组元素较少并且基本有序的时候,使用直接插入排序效率很高,因为数组基本有序的时候,只需要执行少量的插入操作就行了。算法思想先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成),分别进行直接插入排序然后依次缩减增量再进行排序待整个序列中的元素基本有序(增量足够小时),再对全体元素进行一次直接插入排序。代码实现#include <iostream>using namespace std;void shell_sort(int

2021-03-25 18:47:35 336 2

原创 归并排序(C++)

#include <iostream>using namespace std;void merge(int *arr, int start, int middle, int end){ int i, j, k;//i指向左边的数组,j指向右边的数组,k指向原来的数组 int leftSize = middle+1-start; int rightSize = end-middle; //开辟新的内存存放左右两个数组 int *left = (int *)malloc(lef

2021-03-25 13:26:09 168

原创 堆排序(C++)

堆排序是一种选择排序,利用堆这种数据结构来完成选择。算法思想首先将一个(有序)数组构造成一个最大堆(降序)/最小堆(升序)然后将堆顶元素与最后一个元素交换位置,此时末尾元素就是最大值(或最小值)然后将剩余的n-1个元素重新构造成最大堆(或最小堆)所以,堆排序算法大概就分为两个步骤:构造堆(调整数组,使其满足最大堆或最小堆)排序构建堆首先,构造最大堆(以降序为例)就有两种方法,其中下沉操作建堆效率更高。下沉操作建堆:找到最后一个非叶子节点( i=(len-1)/2 ),从后往前遍

2021-03-24 17:48:29 748

原创 C++ unique_ptr笔记

转载于unique_ptrC++11引入了unique_ptr智能指针,主要用于替代不安全的auto_ptr。因此 C++11 标准中的 unique_ptr 模板类没有提供拷贝构造函数,只提供了移动构造函数。std::unique_ptr<int> p1(new int);std::unique_ptr<int> p2(p1);//错误,堆内存不共享std::unique_ptr<int> p2(std::move(p1));//正确,调用移动构造函数对于

2021-03-19 15:21:00 72

原创 C++ auto_ptr笔记

auto_ptr C++11已弃用编译阶段显示没问题运行阶段会报错简单分析对比一下,执行26行代码之后,智能指针baoma此时已经为空指针,再执行第27行代码肯定会报错(引用非法内存的指针)。这是因为auto_ptr要求其对“裸”指针(这里指car)的完全占有性。也就是说一个”裸“指针不能同时被两个以上的auto_ptr所拥有。那么,在拷贝构造或赋值操作时,我们必须作特殊的处理来保证这个特性。auto_ptr的做法是“所有权转移”,即拷贝或赋值的源对象(这里指baoma)将失去对

2021-03-19 14:51:48 112

原创 344.反转字符串

题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。限制: 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。思路: 双指针,同时指向头部和尾部,交换两个位置,然后同时向中间收缩。交换两个数的方法方法1: 使用临时变量////C++//假设场景是调用该函数能够交换两个数的值,所以入参指针和传数组都行//但是不能传值,如void swap(int x,int y)void swap(int *

2021-02-27 23:27:21 60

原创 27.移除元素

题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。class Solution {public: int removeElement(vector<int>& nums, int val) { //使用两个下标,首先遍历数组 //如果不是目标值,就把元素向前覆盖到数组,相当于删除了元素 //返回下标

2021-02-20 20:19:00 39

原创 349. 两个数组的交集

**首先使用两个集合分别存储两个数组中的元素,然后遍历其中的一个集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n) **class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int&.

2021-02-20 18:02:55 108

原创 242.有效的字母异位词

使用数组a为s中每个字母+1计数,再遍历t,将出现的字母都减1,最后再遍历数组a,如果有出现不等于0的情况,说明不是异位词。class Solution {public: bool isAnagram(string s, string t) { char a[26]={0}; for(int i=0;i<s.size();++i) { a[s[i]-'a']++; } for(int .

2021-02-20 17:02:36 53

原创 C++中左值引用和右值引用的区别

01 什么是左值和右值?左值: 就是有确定的内存地址、有名字的变量,可以被赋值,可以在多条语句中使用;右值: 没有名字的临时变量,不能被赋值,只能在一条语句中出现,如:字面常量和临时变量。02 如何区分左值与右值?看能不能对表达式取地址能否用“取地址&”运算符获得对象的内存地址。对于临时对象,它可以存储于寄存器中,所以是没办法用“取地址&”运算符;对于常量,它可能被编码到机器指令的“立即数”中,所以是没办法用“取地址&”运算符;这也是C/C++标准的规定。返回

2021-02-19 15:31:29 1457

原创 35. 搜索插入位置

使用二分法class Solution {public: int searchInsert(vector<int>& nums, int target) { int low=0,high=nums.size()-1,middle; while(low<=high)//当left==right,区间[left, right]依然有效 { middle=(low+high)/2; if(.

2021-02-17 23:59:43 49

原创 用两个栈实现队列

class CQueue {public: stack<int>InStack; stack<int>OutStack; CQueue() { } void appendTail(int value) { InStack.push(value); } int deleteHead() { if(InStack.empty()) retur.

2021-02-13 20:24:34 78

原创 232.用栈实现队列

class MyQueue {public: stack<int> stack1; stack<int> stack2; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { stack1.push(x);

2021-02-13 17:49:46 52

原创 104.二叉树的最大深度

题目:给定一个二叉树,找出其最大深度。先求它的左子树的深度,再求的右子树的深度,最后取左右深度最大的数值 再+1。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre

2021-02-08 22:55:06 53

原创 二叉树的遍历 递归+迭代

递归法前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullpt

2021-02-06 12:27:15 81

原创 const限定符

const常量:它的值不能被修改。const对象必须初始化:const int i=5;const j=get();当利用一个对象去初始化另一个对象时,这两者是不是const都行:int i=10;const int j=i;int m=j;因为一般在初始化变量的时候,初始值都会被拷贝到新建的对象中;一旦拷贝完成,新的对象就和原来的对象没什么关系了。默认状态下,const对象仅在文件内有效如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关..

2021-02-01 01:07:58 67

原创 对称二叉树

方法1:递归解法关键字:二叉树模式识别:深度周游(递归)和广度周游(队列)子树对称条件:1)它们两个根结点具有相同的值2)每个树的右子树都与另一个树的左子树镜像对称思路:使用两个指针分别指向根结点的左右子树,通过同步移动这两个指针来遍历二叉树,left左移时,right右移;left右移时,right左移;然后判断它们所指向的结点值是否相等。单个递归:是判断传入的两个结点是否相等。时间复杂度:O(n)空间复杂度:O(n)/** * Definition for a binary t

2021-01-30 11:28:53 77

原创 107.二叉树的层次遍历II C++

题目:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c

2021-01-24 20:53:21 81

原创 102.二叉树的层序遍历C++

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。

2021-01-24 19:25:33 418

原创 git报错error: failed to push some refs to ‘https://

在提交到远程仓库的时候报错:解决方法:git remote rm origin//先移除和远程仓库的连接git remote add origin 远程仓库地址 //连接远程仓库,创建主分支git pull origin master//把本地仓库的变化连接到远程仓库主分支第三步可能会报错,是因为本地仓库和远程仓库实际上是两个独立的仓库,需要先将这两个仓库合并一下(如果本地仓库是直接从远程仓库上clone下来的,则没有问题)git pull origin master --allow-unr

2021-01-07 00:11:06 244

空空如也

空空如也

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

TA关注的人

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