- 博客(56)
- 收藏
- 关注
原创 多线程编程
多线程编程:交替打印字符串#include "semaphore.h"class FizzBuzz {private: int n; int num; sem_t signalNumber; sem_t signalFizzBuzz; sem_t signalFizz; sem_t signalBuzz;public: FizzBuzz(int n) { this->n = n; this->nu
2022-05-24 02:13:59
144
原创 断续的随手记
输出三角形:输出乘法口诀表实参到形参的调用过程:内联函数与宏的比较为什么通过宏执行的结果是11呢,宏比较机械和简单,只是将传入的参数直接放上去就执行,所以int a = SUM(2 + 3);就相当于int a = 2 + 3 * 2 +3;由于乘法优先级更高,所以得到a的值为11;而在内联函数中,传入的参数是5,所以得到25。为了得到正确的结果,应该将宏改变为::# SUM(x) ((x)*(x))...
2022-05-16 08:32:33
126
原创 codecode
判断三个数的大小,并由大到小输出。ps:逻辑这东西还是得天天练,才三层嵌套都差点晕了。写完一查看看有没有高手只用if else能写的更简洁的,多重对比还是看自己的代码更清晰。逐渐意识到前辈们说的是屎山是什么来的了,不是不能跑,是一千个哈姆雷特就有一千种思路,没有规范性,易读性很差。...
2022-05-14 17:32:20
160
原创 QT界面优化---反走样
一、反走样在绘制非垂直或者非水平的图形时,由于采样不充分,有些地方形成了锯齿状外观,如下图。注意看指针产生的锯齿,还有刻度盘小刻度的扭曲。这就是比较明显的走样现象。在加入反走样语句后,可以再观察图形的变化,明显有了改善。 painter.setRenderHint(QPainter::Antialiasing, true); //将Antialiasing设置为ture,就打开了反走样功能...
2022-05-07 03:49:50
476
原创 Qt时钟表盘
1.效果图2.具体代码widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QMouseEvent>#include <QPainter>#include <QtDebug>#include <QPen>#include <QtMath>#include <QTime>#include <QTimer>
2022-05-06 02:53:31
318
原创 QT实现的聊天工具--探索
按照这位前辈的思路,实现了聊天工具的雏形。现阶段能实现的功能:字体的变换、字体的大小、加粗、倾斜、下划线、颜色变换。保存聊天记录、清空聊天记录。
2022-04-09 10:49:34
737
原创 数据结构练习
题目:设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。#include<stdio.h>#include<stdlib.h>typedef struct Node* List;
2022-03-28 06:00:12
246
原创 【无标题】
一.利用"时钟打点"clock()函数来会比较不同算法的效率。clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。#include <stdio.h>#include <time.h>#include <math.h>clock_t start, stop;double duration;#defi
2022-03-27 01:55:17
108
原创 递归的优点和缺陷
简单写一个“打印从1到N的全部正整数”,尝试用递归把程序跑崩,N=1000尚可,N=10000就绷不住了,如下图。而用for循环实现N=1000000都能正常打印。递归虽然写出的代码简洁,比循环更容易理解,但是有点为难机器了。递归是用栈机制实现的,每深入一层,都要占用一块栈数据区域,对于嵌套层数深的算法,对内存的空间要求很大;递归也需要大量调用函数,这也带来了大量额外的时间开销。所以,对于深度大的算法,相比于递归,循环不管从哪方面而言,似乎都是更好的选择。...
2022-03-25 05:34:41
545
原创 LeetCode每日一题---字符串转换后的各位数字之和
系统的学一下数据结构,否则LeetCode只能刷简单类型的题,代码能力始终有限,树、图、各种排序相关的刷不了。https://www.icourse163.org/learn/ZJU-93001?tid=1002261004#/learn/content
2022-03-24 04:25:09
320
原创 QT控件的简单实现---3
QListWidget使用 Qt 框架开发 GUI 程序,如果需要以列表的方法展示数据,可以优先考虑用 QListWidget 类实现。程序中,我们自定义了一个 QMyLabel 类,它继承自 QLabel 文本框类,因此 QMyLabel 也是一个文本框类。在 QMyLabel 类中,我们自定义了一个 rsetText() 槽函数。QTableWidget 是 Qt 提供的一种表格控件,类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。QTreeWidget 是 Qt 框
2022-03-22 03:58:00
162
原创 QT控件的简单实现---2
QPushButton 是实际开发中最常使用的一种按钮。QLineEdit 是 Qt 提供的一个控件类,专门用来创建单行输入框。实际开发中,我们经常用到 QLineEdit 输入框,比如接收用户输入的个人信息、账户信息、角色名称等,就可以用 QLineEdit 实现。...
2022-03-20 02:24:20
229
原创 QT控件的简单实现---1
刚学QT几天,沉迷于一些大佬的学习博客无法自拔,但实际上走马观花,收获甚微。所以想着先把一些控件先基本实现一遍,熟悉之后再结合数据结构或者多线程再实现一下,做点小东西。https://www.cnblogs.com/tornadomeet/category/374732.html?page=1信号和槽信号和槽是Qt 特有的消息传输机制,它能将相互独立的控件关联起来。QLabel文本框的用法QLabel是Qt 提供给我们的一种文本控件,它的基础功能是显示一串文本。除了显示一串文本外,QLabel
2022-03-19 06:05:46
257
原创 QT入门篇
记得当时是查阅十数篇帖子之后,才在众多的IDE版本中选择了QT Creator长期技术支持(Long Term Support,LTS)5.9.0版本,安装过程就不写了,没什么意思(虽然安装失败了4次)。。。QT是一个跨平台的C++开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序。实现的就是软件的UI设计。QT和MFC的对比:MFC只能应用在 Windows 平台;而QT是可以跨平台的,一次编写,到处运用。MFC只是给Windows API加上了简单的
2022-03-18 03:30:03
335
原创 进、线程杂记
进程:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序,数据集合和进程控制块三部分组成:程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息。进程具有的特征:动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;并发性:任何进程都可以同其他进行一起并发执行;独立性:进程是系统进行资源分
2022-03-07 21:07:33
81
原创 STL常用算法总结(下)
5.数值算法包含在头文件中,进行数值运算。#include <iostream>#include <vector>#include <numeric> // 数值算法#include <iterator> // 定义了ostream_iteratorusing namespace std;int main(int argc, char* argv[]){ int arr[] = { 1, 2, 3, 4, 5 }; vector<
2022-02-27 04:23:56
224
原创 STL常用算法总结(上)
这两天把STL中最常用的的算法敲了一遍,STL中常用算法可大致分为四类:非可变序列算法:不直接修改所操作的容器内容的算法。可变序列算法:可以修改容器内容的算法。排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。数值算法:对容器内容进行数值计算。...
2022-02-27 04:15:17
644
原创 容器和迭代器特性一回忆版
容器:存储数据的模板(数据结构)。常用的容器有以下几个:string:字符串容器。使用增删改查操作,比C语言更方便。vector:线性结构,相当于动态数组。array在申请内存空间时都会申请的稍微大一些,太大了会浪费内存,太小了新数据进来又容易不够用。而vector正好解决了这个问题,当有新的数据进来,空间不够用时,系统会自动开辟一块新的空间将数据装到里面,再释放原有空间,vector容器的容量一定是大于等于数据个数的。存储数据的方式是随机存储,所以迭代器访问也是随机访问。deque:线性结构,双端
2022-02-24 21:17:29
141
原创 2022/02/22
尝试用刚学的vector容器练一下算法题。这次是没有考虑时间复杂度的暴力解法。随后好奇看了一下容器中成员方法size()函数的解释好像也能看得懂,然后从上往下多看了几个熟悉一下具体应用场景。看起来成员方法很多,不便于记忆,但总结起来实现的也就是构造函数、赋值操作、比较、容器大小(长度)、数据存取、插入删除等功能,而且根据英文命名很容易联想起该方法的大致用途,只需要写代码的时候能想起存在这种成员方法就行了,所以还是要多练练算法题,多熟悉。...
2022-02-23 03:38:53
200
原创 2022/02/21
STL包含六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器。STL六大组件的交互关系:容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。容器:已实现的最广泛应用的数据结构。如数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map)。算法:问题的解法,以有限的步骤,解决逻辑或数学上的问题。迭代器:容器和算法的粘合剂。#define _C
2022-02-22 04:06:21
449
原创 2022/02/20
纯虚函数存在意义:很多情况下,基类不能对虚函数给出有意义的实现,所以将它写作纯虚函数,将它的实现留给其派生类来做。友元:类的主要特点之一是数据隐藏和封装,从而私有成员只能在它的成员函数内访问,有时为了访问类的私有成员而需要在程序中多次调用成员函数,这样会因为频繁调用带来较大的时间和空间开销,从而降低程序的运行效率,因此,C++提供友元对私有或保护成员进行访问。友元包括友元函数或者友元类。在类中声明友元函数时,需要在其函数名前加上关键字friend。此声明可以放在公有部分,也可以放在保护部分和私有部分。
2022-02-21 06:17:29
488
原创 2022/02/19
虚函数和纯虚函数的区别:纯虚函数只有定义,没有实现的部分,只是一个函数的声明,需要留到子类去实现;而虚函数既有定义也需要实现,否则会出现函数未定义的错误。(理解不全,需要再实验)写程序常见的错误分为编译时错误和运行时错误。编译时错误一般时语法错误(关键词拼写错误、分号忘写等),运行时错误称为异常,C++中对异常的处理是,如果一个函数出了异常,可以不在此层级运行,传给上一级(即调用函数),如还不能处理,则逐级上传,最后还不能解决,则自动调用系统函数terminate(),由它调用abort终止运行。
2022-02-20 01:55:45
371
原创 2022/02/18
C++输入/输出:是明显优于C的输入/输出系统的,是类型安全的、可以防止格式控制符与输入输出数据的类型不一致的错误。用于输入输出的头文件:iostream:使用cin、cout等流对象进行针对标准设备的I/O操作时,须包含此头文件。fstream:用于用户管理文件的I/O操作。使用文件流对象进行针对磁盘文件的操作,须包含此头文件。strstream:用于字符串流的I/O操作。使用字符串流对象进行针对内存字符串空间的I/O操作,须包含此头文件。iomanip:用于输入/输出的格式控制。...
2022-02-19 07:53:48
179
原创 2022/02/16
多态性:例如,买票时,成人买票全价;是学生那么半价;是军人,就可以优先买票。不同的人买票会有不同的实现方法,产生不同的动作。这样就可以用同样的接口访问不同功能的函数。多态性减少了编程过程中冗余的部分,提高了软件的重用性和可扩展性。从实现角度来看,分为编译时多态和运行时多态。编译时多态主要由函数重载和运算符重载实现,运行时多态主要由虚函数实现。...
2022-02-17 03:55:03
262
原创 2022/02/15
继承和派生:顾名思义,继承和派生是从不同角度来看的。当有新的特性或问题出现时,已有代码和设计无法满足需求,但又想尽量保持现有代码和设计,所以在已有代码的基础上产生的新的特性叫做派生,换个角度来看,产生的新的特性是在原特性的修改下实现的,故称之为继承。...
2022-02-16 01:59:18
56
原创 2022/02/14
今天再看《21天学通C++》,看到隐藏基类方法,脑子突然就断线了,懵了,这是干啥用的?为啥要隐藏基类?突然有些焦虑,现在搞清楚这个点但是不练三天之后能记住多少呢,而且有时候光看一位作者的阐述是片面的,作者觉得容易理解的例子并不适用每个人的思维方式,最后还是要继续查找资料搞清楚知识点。之前一直沉浸在书本,跟着书本的思路走,到头来进度和效率都达不到预期,所以准备换个学习思路。C++大概有基本语法、类和对象、继承和派生、多态和虚函数、重载等重点知识。这两天把剩下的不懂的分点再重新找资料去突破,还是讲书本作为字典去
2022-02-15 02:49:27
352
原创 2022/02/13
今天看了面向对象的分析方法,比较了一下面向对象和面向过程编程的区别,看到一个比较容易理解的例子,拿五子棋举例。面向过程编程:编程的思路就是根据下棋的实际流程来的,开始游戏–>黑子先走–>绘制画面–>判断输赢–>轮到白子–>绘制画面–>判断输赢–>回到第二步–>输出结果。编写程序的过程就是一层层的将每个步骤实现。优点是性能相对于面向对象编程要高。(因为类的调用需要实例化,new的时候需要为对象分配内存,比较消耗资源??)面向对象编程:可以说是以功能层面分为用
2022-02-14 04:07:52
2910
原创 2022/02/12
构造函数:由于类的数据成员不能在类的声明时初始化,所以引入了构造函数来进行初始化。语法特点:没有返回值。public: Test() { }析构函数:与构造函数相反,当跑出作用域时,自动执行析构函数,比如释放堆中的内存。构造函数可以有多个,析构函数只有一个,语法特点:同样没有返回值。~Test(){}重载函数:写代码时经常会遇见一些功能相同但某些细节不同的函数,比如两数相加的函数Add,但又没有明确两数是int,double,float哪种类型,所以引入重载函数来方便编写代码。
2022-02-13 04:05:53
391
原创 2022/02/11
140-188,指针和引用。引用:int &rsomeRef = someInt,相当于rsomeRef是someInt的别名,访问二者任何一个都是等价的。引用和指针的区别:引用实际上就是别名,而指针是地址。引用不能为空,而指针所指向的值可以。引用不能被重新赋值,而指针可以。...
2022-02-12 03:36:18
217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人