二叉树篇
1. 二叉树之层序遍历1.1 144-二叉树的前序遍历144
123456789101112131415161718192021222324252627/** * 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(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */class Solution {public: void R ...
tips
1. MySQL基本使用1.1 MySQL的启动1. 管理员身份打开cmd
12net start mysql80 ##启动MySQLnet stop mysql80 ##关闭MySQL
1.2 MySQL的客户端连接1. 管理员身份打开cmd
1mysql [-h 127.0.0.1] [-P 3306] -u root -p
使用这种方法需要配置环境变量,MySQL的bin目录
2. 打开mysql命令行客户端,输入密码以打开
1.3 数据模型
关系型数据库 (RDBMS)
概念 : 建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点 :
使用表存储数据,格式同意,便于维护
使用SQL语言操作,标准统一,使用方便
2. SQL
SQL通用语法
SQL语句可以单行或多行书写,以分号结尾
SQL依据可以使用空格/TAB增强可读
MySQL数据库的SQL语句不区分大小写,关键字建议大写
注释:
单行注释 : –注释内容 / # 注释内容(MySQL特有)
多行注释: /*注释内容*/
分类
全称
...
基本数据结构篇
1.数组篇
1.1 704-二分查找704
123456789101112131415161718192021class Solution {public: int search(vector<int>& nums, int target) { int begin =0; int end = nums.size()-1; int mid; while(begin <= end) // -1,0,3,5,9,12 { mid = begin+(end - begin)/2; if(nums[mid] < target) begin = mid+1; else if(nums[mid] > target) end = mid-1; else return mid; ...
JSON和程序发布
1. JSONJSON(JavaScrip Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
关于上面的描述可以精简为一句话:Json是一种数据格式,和语言无关,在什么语言中都可以使用Json。基于这种通用的数据格式,一般处理两方面的任务:
组织数据(数据序列化),用于数据的网络传输
组织数据(数据序列化),写磁盘文件实现数据的持久化存储(一般以.json作为文件后缀)Json中主要有两种数据格式:Json数组和Json对象,并且这两种格式可以交叉嵌套使用,下面依次介绍下这两种数据格式:
1.1 Json数组Json数组使用 [] 表示,[]里边是元素,元素和元素之间使用逗号间隔,最后一个元素后边没有逗号,一个Json数组中支持同时存在多种不同类型的成员,包括:整形、 浮点、 字符串、 布尔类型、 json数组、 ...
多线程和套接字通信
1. 多线程的使用在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。
在qt中使用了多线程,有些事项是需要额外注意的:
默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新
子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理
主线程和子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制
1.1 线程类 QThreadQt中提供了一个线程类,通过这个类就可以创建子线程了,Qt中一共提供了两种创建子线程的方式,后边会依次介绍其使用方式。看一下这个类中提供的一些常用API函数:
1.1.1 常用共用成员函数123456789101112131415161718192021222324252627// QThread 类常用 API// 构造函数QThread::QThre ...
事件
1. 事件处理器1.1 事件Qt是一个基于C++的框架,主要用来开发带窗口的应用程序(不带窗口的也行,但不是主流)。我们使用的基于窗口的应用程序都是基于事件,其目的主要是用来实现回调(因为只有这样程序的效率才是最高的)。所以在Qt框架内部为我们提供了一些列的事件处理机制,当窗口事件产生之后,事件会经过:事件派发 -> 事件过滤->事件分发->事件处理几个阶段。Qt窗口中对于产生的一系列事件都有默认的处理动作,如果我们有特殊需求就需要在合适的阶段重写事件的处理动作。
事件(event)是由系统或者 Qt 本身在不同的场景下发出的。当用户按下/移动鼠标、敲下键盘,或者是窗口关闭/大小发生变化/隐藏或显示都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如鼠标/键盘事件等;另一些事件则是由系统自动发出,如计时器事件。
每一个Qt应用程序都对应一个唯一的 QApplication应用程序对象,然后调用这个对象的exec()函数,这样Qt框架内部的事件检测就开始了(程序将进入事件循环来监听应用程序的事件)。
1234567in ...
控件
1. 按钮类型控件1.1 按钮基类 QAbstractButton
在QT中为我们提供了可以直接使用的按钮控件, 如下图。这些按钮种类虽然繁多, 但是它们都拥有相同的父类QAbstractButton。这些子类按钮的大部分属性都是从这个基类继承的,因此搞明白这个类为我们提供的相关功能还是非常重要的。其中Dialog Button Box比较特殊不是一个单一控件, 它是两个QPushButton的组合并且水平排列,这个不能作为一个新控件来研究。
这些按钮控件之间的继承关系如下图:
介绍一下QAbstractButton中的一些常用API
1.1.1 标题和图标1234567891011121314// 参数text的内容显示到按钮上void QAbstractButton::setText(const QString &text);// 得到按钮上显示的文本内容, 函数的返回就是QString QAbstractButton::text() const;// 得到按钮设置的图标QIcon icon() const;// 给按钮设置图标void setIcon(const ...
窗口
1. 基础窗口类1.1 QWidget
QWidget类是所有窗口类的父类(控件类是也属于窗口类), 并且QWidget类的父类的QObject,也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。关于这个窗口类的属性介绍, 参考容器控件之QWidget。
1.1.1 设置父对象123456789// 构造函数QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 公共成员函数// 给当前窗口设置父对象void QWidget::setParent(QWidget *parent);void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);// 获取当前窗口的父对象, 没有父对象返回 nullptrQWidget *QWidget::parentWidget() const;
1.1.2 窗口位置123456789101112//------------- 窗口位置 ------- ...
基础数据类型和信号槽
1. Qt基本结构1.1 Qt本有项目1.1.1 项目文件(.pro)
在创建的Qt项目中自动生成了一个后缀为 .pro 的项目文件,该文件中记录着项目的一些属性信息,具体信息如下:
1234567891011121314151617181920212223242526# 在项目文件中, 注释需要使用 井号(#)# 项目编译的时候需要加载哪些底层模块QT += core gui # 如果当前Qt版本大于4, 会添加一个额外的模块: widgets# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了greaterThan(QT_MAJOR_VERSION, 4): QT += widgets # 使用c++11新特性CONFIG += c++11 #如果在项目中调用了废弃的函数, 项目编译的时候会有警告的提示 DEFINES += QT_DEPRECATED_WARNINGS# 项目中的源文件SOURCES += \ main.cpp \ mainwindow.cpp # 项目中的头文件HEADERS ...
套接字通信
1. 套接字-socket1.1 概念
局域网和广域网
局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。
广域网:又称广域网、外网、公网。 是连接不同地区局域网或城域网计算机通信的远程公共网络。
IP(Internet Protocol):本质是一个整形数,用于表示计算机在网络中的地址。IP协议版本有两个:IPv4和IPv6
IPv4(Internet Protocol version4):
使用一个32位的整形数描述一个IP地址,4个字节,int型
也可以使用一个点分十进制字符串描述这个IP地址: 192.168.130.198
分成了4份,每份1字节,8bit(char),最大值为 255
0.0.0.0 是最小的IP地址
255.255.255.255是最大的IP地址
按照IPv4协议计算,可以使用的IP地址共有 2^32^ 个
IPv6(Internet Protocol version6):
使用一个128位的整形数描述一个IP地址,16个字节
也可以使用一个字符串描述这个IP地址:2001:0db8:3c4d:001 ...