自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Qt:利用qcustomplot绘制动态曲线

#pragma once#include <QtWidgets/QWidget>#include "ui_dynamicCurve.h"#include "qcustomplot.h"#include <QTimer>class dynamicCurve : public QWidget{ Q_OBJECTpublic: dynamicCurve(QWidget *parent = Q_NULLPTR); ~dynamicCurve(...

2022-01-15 10:52:44 2929 4

原创 effective C++:尽量用 new 和 delete 而不用 malloc 和 free

malloc 和 free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数。假设用两种方法给一个包含 10 个 string 对象的数组分配空间,一个用malloc,另一个用 new:    string stringArray1 =      static_cast<string>(malloc(10 * sizeof(string)));    string *stringArray2 = new ...

2021-12-17 14:24:55 1148

原创 effective C++:尽量用 const 和 inline 而不用#define

这个条款最好称为:“尽量用编译器而不用预处理”,因为#define 经常被认为好象不是语言本身的一部分。这是问题之一。再看下面的语句:#define ASPECT_RATIO 1.653编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是 ASPECT_RATIO 不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是 1.653,而不是 ASPECT_RATIO。如果 ASPECT_

2021-12-17 14:01:03 1151

原创 leetCode:删除排序数组中的重复数字

Given a sorted array, remove the duplicates in place such that each element appear only onceand return the new length.Do not allocate extra space for another array, you must do this in place with constant memory.For example, Given input array A = [1, 1,

2021-12-17 11:00:25 284

原创 算法:逆序对

数组中 前面出现的数比后面出现的数大 就称为逆序对:

2021-12-17 09:24:35 286

原创 C语言:指针函数与函数指针

指针函数int* f(int a, int b);让指针标志 * 与int紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,f是函数名,返回值类型是一个int类型的指针。所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。*p = 3;函数指针顾名思义,函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象。例子:下面是利用函数指针分别求两个整数的最大值和最小值的用法。...

2021-12-17 09:13:54 800

原创 TCP协议

tcp编程的服务器一般步骤是:1.创建一个socket,用函数socke();2.设置socket属性,用函数setsockopt();3.绑定ip地址,端口信息到socket上,用函数bind();4.开启监听,用函数listen()5.接收客户端上来的连接,用函数accept();6.收发数据,用函数send()和recv(),或者read()和write()7.关闭网络连接;8.关闭监听。tcp编程的客户端一般步骤是:1.创建一个socket 用函数socket

2021-12-17 09:08:23 120

原创 算法:树中两个结点的最低公共祖先

输入两个树结点,求它们的最低公共祖先。如果是二叉树,并且是二叉搜索树,二叉树是排序过的,位于左子树的结点都比父节点要小,而位于右子树的结点都比父节点大,我们只需要从树的根结点开始和两个输入的结点进行比较。如果当前结点的值比两个结点的值都大,那么最低的共同父节点一定是在当前结点的左子树中,于是下一步遍历当前结点的左子树结点。反之则在右子树上。当找到一个结点在这两个结点的中间,那么就是最低的公共祖先。如果该树不是二叉树,而且有指向父节点的指针。如果树中的每个结点(除根结点之外)都有一个指向父节.

2021-12-15 15:46:34 1284 1

原创 C++:构造函数的初始化列表的问题

#include <iostream>using namespace std;class A{private: int n1; int n2;public: A() : n2(0), n1(n2 + 2) {} void Print() { cout << "n1: " << n1 << "n2: " << n2; }};int main(){ A a; a.Print(); return 0;}.

2021-12-15 13:34:23 275

原创 C/C++:把字符串转换成整数

把一个字符串转成整数,这看起来是道很简单的题目,实现其基本功能大部分人能用10行之内的代码来实现。可是,当我们把很多特殊情况,即测试用例都考虑进去,这不算一件容易的事情。把空指针null, 空字符串"", 正负号,溢出等方方面面的测试用例都考虑到,并在写代码的时候对这些特殊的输入都定义好合理的输出。代码如下:enum Status{ kValid = 0, kInvalid};int g_nStatus = kValid;long long StrToIntCode(const ch

2021-12-15 11:37:52 1533

原创 算法:跳跃表

1、跳跃表的定义跳跃表(Skip List):增加了向前指针的链表叫做指针。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。跳表在原有的有序链表上增加了多级索引,通过索引来实现快速查询。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表是一个随机化的数据结构,可以被看做是二叉树的一个变种,它在性能上和红黑树、AVL树不相上下,但是跳表的原理非常简单, 举生活中一个简单例子,例如我们做公交车,有快线和慢线,想起我之前在广州念书,学校距离市中

2021-12-14 09:49:16 6347 1

原创 算法:和为S的两个数字VS和为S的连续正数序列

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S。如果有多对数字的和等于S,输出任意一对即可。例如:输入数组{1,2,4,7,11,15}和数字15,输出应该是4和11。首先定义两个指针,第一个指针指向数组的第一个(也就是最小的),指向数字1;第二个指针指向最后一个元素(也就是最大的),指向15,此时相加是16,比15大,最后一个指针向前移动,指向11,相加为12,比15小;将第一个指针向后移,指向2,相加为13,比15小,那么第一个指针向后移,指向4,相加为15,等于15;

2021-12-10 17:21:49 660

原创 算法:求连续子数组的最大和

输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个整数组成一个子数组为求所有子数组的和的最大值,要求时间复杂度为O(n)。例如输入的数组为{1, -2, 3, 10. -4, 7, 2, -5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和为18。我们试着从头到尾逐个累加示例数组中的每个数字。初始化和为0,第一步加上第一个数字1,此时和为1。接下来第二步加上数字-2,就变成-1了,这个时候的和为-1,小于0,那就是舍去。接下来加3,3比之前的1大,那么就更新,把

2021-12-08 14:25:20 542

原创 算法:最小的k个数

输出一个数组中最小的k个数,最暴力的求解方法是先排序,然后循环输出最小的k个数,这样的时间复杂度是O(nlogn),很显然效率低下。方法1:基于快排思想,利用Partition函数来解决这个问题,如果基于数组的第k个数字来调整,这使得比k小的数字在数组k的左边,比k大的数字在数字k的右边,下面看看代码://快排int Partition(int data[], int length, int start, int end){ if(data == NULL || length <= 0

2021-12-08 11:21:06 992

原创 算法:复制复杂链表

在复杂链表的结点中,除了有指向下一个结点的指针(实线箭头)还有指向任意结点的指针(虚线箭头)。//复杂链表的结构体定义struct ComplexListNode{ int m_nValue; ComplexListNode* m_pNext; ComplexListNode* m_pSibling; };第一步,复制原始链表的任意结点N并创建新结点N',再把N'链接到N的后面// 第一步: 复制原始链表的任意结点N并创建新结点N',再把N'链接到N的后面void C.

2021-12-06 16:34:34 140

原创 算法:二叉树中和为某一值的路径

//二叉树中和为某一值的路径void FindPath(BinaryTreeNode* pRoot, int expectedSum){ if(pRoot == NULL) return; std::vector<int> path; int currentSum = 0; FindAllPath(pRoot, expectedSum, path, currentSum);}void FindAllPath(BinaryTreeNode *pRoot, i...

2021-12-06 15:20:30 155

原创 算法:二叉搜索树的后序遍历序列

代码如下://二叉搜索树的后序遍历序列bool verifySquenceOfBST(int sequence[], int length){ if(sequence == NULL || length <= 0) return false; int root = sequence[length - 1]; //在二叉搜索树中左子树的结点小于根结点 int i = 0; for(; i < length - 1; ++i) { if(sequence[i] &...

2021-12-06 14:49:59 79

原创 算法:包含min函数的栈

借助一个辅助栈,这个栈每次保存栈中的最小元素,当push_back一个新的元素进来,与辅助栈的栈顶进行比大小,如果新的元素比栈顶大,就还是push_back栈顶的元素,如果新的元素比栈顶小,就push_back新的元素,具体看如下步骤:当调用min函数,就只需要获取辅助栈的栈顶,这个值就是栈的最小值;当调用pop函数,将辅助栈和数据栈都pop出来。具体看如下代码:// 包含min函数的栈template <typename T> void StackWithMin&.

2021-12-06 14:48:04 435

原创 算法:顺时针打印矩阵

//顺时针打印矩阵void PrintMatraixClockwisely(int** numbers, int columns, int rows){ if(numbers == NULL || columns <= 0 || rows <= 0) return; int start = 0; while(columns > start * 2 && rows > start * 2) { PrintMatrixIndexCircl...

2021-12-06 14:40:37 648

原创 算法:二叉树的镜像

//二叉树的镜像void MirrorRecursively(BinaryTreeNode *pNode){ if((pNode == NULL) || (pNode->m_pLeft == NULL && pNode->m_pRight == NULL)) return; BinaryTreeNode *pTemp = pNode->m_pLeft; pNode->m_pLeft = pNode->m_pRight; pNod...

2021-12-06 14:38:01 311

原创 算法:树的子树 输入两棵二叉树A和B,判断B是不是A的子树

//B是否为A的子树bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){ bool result = false; if(pRoot1 != NULL && pRoot2 != NULL) { if(pRoot1->m_nValue == pRoot2->m_nValue) result = DoesTree1HaveTree2(pRoot1, pRoot2); if(...

2021-12-06 14:36:04 89

原创 算法:递归的性能的分析(斐波那契数列)

递归虽然有简洁的优点,但它同时也有显著的缺点。递归由于是调用自身,而函数调用是有时间和空间的消耗;每一次函数调用,都需要在内存栈中分配空间以保存参数,返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间,这就不难理解递归实现的效率不如循环。递归中有可能很多计算是重复的,从而对性能带来很大的负面影响,递归的本质是把一个问题分解成为两个或者多个小问题。如果多个小问题存在相互重叠的部分,那么就存在重复的计算。如果斐波那契数列,其时间复杂度是指数倍,是非常bad~斐波那契数列:–F1 =

2021-11-30 11:16:05 577

原创 Qt:json文件的读写操作

直接看代码:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget(); void writeJson(); void readJson()..

2021-11-18 15:45:07 316

原创 Qt:udp数据的收发

直接看代码:#include "widget.h"#include "ui_widget.h"#include <QHostAddress>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); //分配空间,指定父对象 udpSocket = new QUdpSocket(this); //绑定 ..

2021-11-16 15:25:07 4175

原创 Qt:excel表格的写入

先上效果图:直接上代码,代码有重要API的注释:#include "widget.h"#include "ui_widget.h"#include <QFileDialog>#include <QVariant>#include <QAxObject>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setup.

2021-11-16 11:02:30 2194 1

原创 QT:读excel文件的操作

效果图:直接看代码:excelbash.hexcelbash.cpp#ifndef EXCELBASE_H#define EXCELBASE_H#include <QObject>#include <QAxObject>#include <QString>#include <QStringList>#include <QVariant>#include <QObject>class excel...

2021-11-15 11:28:48 1283 2

原创 Qt:同时操作两个sqlite的数据库

db = QSqlDatabase::addDatabase("QSQLITE", "first"); //打开数据库一 指定绝对路径 这个是其他文件生成的数据库db.setDatabaseName("D:/qt_demo/build-sqlite_demo-Desktop_Qt_5_8_0_MinGW_32bit-Debug/student.db");db2 = QSqlDatabase::addDatabase("QSQLITE", "second");//打开数据库一 指定绝对路径 .

2021-11-08 14:04:12 3753 1

原创 Qt:重写QSqlQueryModel类,让其数据可编辑

QSqlQueryModel的数据数据默认是只读的,不可以编辑的,如果需要可编辑,需要重写基类的虚函数,重写的函数接口为:bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex &index) const;先看效果图:修改前:修改后:下面直接上代码~#.

2021-11-05 15:17:07 2290 2

原创 C语言:strcpy、strncpy、memcpy的区别

一、函数说明1、memcpy函数void*memcpy(void *s1, const void *s2, size_t n);说明:函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。返回值:函数memcpy返回s1的值。2、strcpy函数char*strcpy(char *s2, const char *s1);说明:函数strcpy把s1指向的串(包括空字符)复制到s2指向的数组中。...

2021-11-05 13:48:50 597

原创 C++:智能指针

1.什么是智能指针?是一个类,用来存储指针(指向动态分配对象的指针)。1.智能指针是通过基本类型(模板类)指针,构造类的对象,只能指针本身就是一个自定义的对象。 2.当此对象被销毁时,即调用此对象的析构函数,释放此指针。 也就是用栈中的空间来管理堆中的内存。2.最常用的智能指针:(1)std::auto_ptr 有很多问题,不支持复制(拷贝构造函数)和赋值(operator = ),但复制或者赋值的时候不会提示出错,因为不能被复制,所以不能被放在容器中。(2)C++1...

2021-11-05 11:41:56 580

原创 MySQL常用面试题

数据库索引的原理,为什么要用B+树,为什么不用二叉树?可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?为什么不是一般二叉树?如果二叉树特殊化为一个链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。为什么不是平衡二叉树呢?我们知道,在内存比在磁盘的数据,查询效率快得多。如果树这种数据结构作为索引,那我们每查找一次数据就需要从磁盘中读取一

2021-11-05 11:35:31 269

原创 Linux网络编程:定时器

设置定时器,(闹钟),在指定second后,内核会给当前进程发送14 SIGALARM信号,进程收到信号,默认动作终止。每一个进程有且只有一个定时器。unsinged int alarm(unsinged int second);返回0或者剩余的秒数,无表示失败。常用alarm(0)取消定时器,返回旧闹钟剩余的秒数。定时器,与进程的状态无关(自然定时法)!就绪,运行,挂起(阻塞,暂停),终止,僵尸 无论进程处于何种状态,alarm都计时。使用time 命令查看程序执行的时间。程序运行的瓶

2021-11-05 11:33:41 335

原创 Qt:qt5.6安装qchart的步骤

1.下载perl软件;2.git clone 5.7的qtchart源码; gitHub官方的分支是dev 需要回退到5.73.设置环境变量 添加环境变量 qmake(位置在qt下) nmake(位置在vs下)主要用来编译pro文件,直接qt打开编译不通过;4.在qtcharts下面执行 cmd 依次执行qmake根据需要选择编译Debug或者Release版本,这里我选择了都编译qmake CONFIG+="debug_and_release build_all...

2021-11-05 11:21:29 4798

原创 Matlab的simulink模型生成C/C++代码的步骤

建立好simulink模型后点击MOEDELING,然后点击Model Settings进行配置(快捷键 Crtl+E)打开配置参数对话框,点击对话框的Solver面板,设置下面几项参数,如图所示:① Start time:0.0;② Stop time:inf;③ Type:Fixed-step;④ Solver:discrete(no continuous states);⑤ Fixed-step size(fundamental sample time):设置为步长time_step(

2021-11-05 11:19:30 6771

原创 Qt:Sqlite的增删改查的基本操作

看看效果图:废话不多说,直接上代码,代码中有很详细的介绍~#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QSqlDatabase>#include <QSqlQuery>#include <QSqlError>#include <QDebug>namespace Ui {class Widget;}class Widget : publ

2021-11-05 11:10:16 2726

原创 Qt:QTreeView的应用,选中的setCheckable按钮功能

QTreeView的按钮选择功能,主要是利用void QStandardItem::setCheckable(bool checkable)这个函数实现的,先给大家看效果图:下面直接看代码:#include "widget.h"#include "ui_widget.h"#include <QStringListModel>#include <QTreeView>#include <QList>#include <QCheckBox>

2021-11-03 15:09:17 2932 2

原创 Qt:tableWidget分页功能,并且插入控件

在tableWidget加入控件主要用:void QTableWidget::setCellWidget(int row, int column, QWidget *widget)int rowCount = ui->tableWidget->rowCount();QWidget *myWidget = new QWidget;QVBoxLayout *hLayout = new QVBoxLayout();QCheckBox *ckb = new QCheckBox();//

2021-11-03 14:54:40 5246 2

原创 密码学:同余方程组

x=12(mod25)x=9(mod26)x=23(mod27)

2021-10-14 18:13:19 509

原创 密码学:求逆算法

书上例题5.6利用求逆算法,计算104729^(-1)mod 15485863。

2021-10-14 18:08:27 787

原创 密码学:RSA加密课后题

下面数字序列给出的是一个用RSA 加密的密文串,你的任务是对它进行解密。你的任务是对它进行加密,系统公开n=31313,b=4913。你需要在你的程序中最后一步完成这个过程的逆6340 8309 14010 8936 27358 25023 16481 25809 23614 7135 24996 30590 27570 26486 30388 9395 27584 149994517 12146 29421 26439 1606 17881 25774 7647 23901 7372 25774

2021-10-14 18:03:36 385

空空如也

空空如也

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

TA关注的人

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