C++
文章平均质量分 66
阿翔要努力变强
记录和分享自己的学习成长过程,目前主要学习用Qt开发应用软件以及一些图像处理的工作,偶有关于深度学习的记录和分享
展开
-
设计模式系列(大话设计模式c++版)——建造者模式
设计模式系列(大话设计模式c++版)——建造者模式模式定义模式特点模式实现模式定义建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。即将一个产品的内部表象与产品的生成过程分隔开来,用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。其区别于外观模式的地方在于,外观模式不涉及继承和多态,更多的是对封装思想的运用,而且更精髓的地方在于对于多个接口而非具体类的封装(可能平时代码不是过于复杂的情况下更多的使用是对具体类的封装)模式特点建造者原创 2021-07-16 22:18:28 · 308 阅读 · 0 评论 -
设计模式系列(大话设计模式c++版)——观察者模式
设计模式系列(大话设计模式c++版)——观察者模式模式定义模式特点模式实现模式定义让我们来看看《大话设计模式》这本书中对于观察者模式的定义:其又叫发布—订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当这个主题对象在状态发生变化时,会通知所有的观察者对象,是他们可以随之自动更新自己的状态。其组成大概分为至少4个部分:观察者接口、发布者接口、一般是1个发布者、不止一个的观察者模式特点将一个系统分割成一系列相互协作的类,同时又需要维护类间的一致性,观察者模式可以避免各类原创 2021-07-16 17:24:38 · 448 阅读 · 2 评论 -
LeetCode刷题篇—206.反转链表
LeetCode刷题篇—206.反转链表题目思路求解方法题目反转一个单链表。思路最近因为很多链表里的问题都涉及到了递归的方法,所以又重新深入思考了一些递归的问题,今天这道题分享迭代和递归两种思路。在链表类型的题目当中,经常用到的一个小技巧就是创建一个dummy节点,和一个记录head节点的cur节点。一、迭代法(1)原本的顺序是1->2->3,初始dummy节点为NULL,即(dummy,1->2->3)*cur = head记录头节点,指向1。当cur节点不为N原创 2021-03-27 22:24:04 · 224 阅读 · 0 评论 -
LeetCode刷题篇—27.移除元素
LeetCode刷题篇—27.移除元素题目思路求解方法题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。思路一、一次遍历法题目要求输出的是更新后的数组长度,而且可以修改输入数组,那么可以考虑将所有数值等于val的元素全部移到数组尾端,然后输出前部分的长度。(1)定义新的变量n等于数组原创 2021-03-21 17:13:58 · 168 阅读 · 0 评论 -
LeetCode刷题篇—20.有效的括号
LeetCode刷题篇—20.有效的括号题目思路求解方法题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路这是一道典型的用到栈这种数据结构的题目,当然除了只用栈之外还可以选择栈和哈希表结合的求解,下面将逐一介绍:一、单纯使用栈(几种思路细节略有不同)整体思路是将字符串中先遇到的括号入栈,当后面的括号与栈顶的括号匹配的时候,出栈,如果最后栈为空,说明全部原创 2021-03-21 16:39:09 · 217 阅读 · 0 评论 -
LeetCode刷题篇—496.下一个更大的元素(一)
LeetCode刷题篇—496.下一个更大的元素(一)题目思路求解方法题目给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。思路1、辅助栈根据之前一题所讲的辅助栈的思想,通常是除了所有元素所在栈之外,另开辟新的栈存储一些变量。对于本原创 2021-03-08 22:10:25 · 180 阅读 · 0 评论 -
LeetCode刷题篇—155.最小栈
LeetCode刷题篇—155.最小栈题目思路求解方法题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。思路此题意为随时找到栈中的最小元素,栈是一种先入后出的数据结构,只能访问到栈的栈顶元素,所以无法像数组或链表一样随意遍历访问到最小元素。所以此时在这到题中采用辅助栈的方法,用另外的一个栈存储记录每原创 2021-03-08 21:13:06 · 247 阅读 · 0 评论 -
Qt Creator添加第三方头文件和类库(经验篇)
Qt Creator添加第三方头文件和类库在Qt Creator的项目中添加头文件和库最近的项目用到工业线阵相机,需要利用沟通相机,开发出独立的成像软件,所以才有了对于qt中添加sdk中的一些类库的需求在Qt Creator的项目中添加头文件和库在Qt工程中,通过.pro文件对链接库进行管理,就像VS中的包含目录、库目录一样,对于其他第三方库的添加,本质上与调用opencv库是一致的。1、添加额外需要的头文件目录类似添加opencv中的include路径INCLUDEPATH += C:\ope原创 2021-03-07 10:50:36 · 10251 阅读 · 1 评论 -
LeetCode刷题篇—121.股票问题
LeetCode刷题篇—169.多数元素题目思路求解方法题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路将题目进行翻译即——需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)原创 2021-03-02 21:02:12 · 357 阅读 · 0 评论 -
LeetCode刷题篇—169.多数元素
LeetCode刷题篇—169.多数元素题目思路求解方法题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路1、投票法投票法的大致思路是,假定数组首元素为多数元素,然后和它相同,则计数count++,否则count–,若计数count-1=0,则说明之前的相同元素数量和不同元素数量相等,则认为下一个元素为数组中的多数元素举例[1,2,3,3,3,3,2](1)默认多数元素原创 2021-03-02 20:44:43 · 135 阅读 · 0 评论 -
LeetCode刷题篇—283.移动零
LeetCode刷题篇—283.移动零题目思路求解方法题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。思路1、暴力法题目要求将所有0元素移动到数组末尾,即可以理解为将非零的元素移动到数组前面,所有非零元素移动完后,将剩余元素置0即可。举例:[1,2,0,3](1)第一个元素非零,将其置于本位;(2)第二个元素非零,将其置于本位;(3)第三个元素为零,跳过;(4)第四个元素非零,将其置于第三位;[1,2,3,3](5)遍历完,将第三位之原创 2021-03-02 16:35:29 · 275 阅读 · 0 评论 -
LeetCode刷题篇—53.最大子序和
LeetCode刷题篇—53.最大子序和题目思路求解方法题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。思路本题的思路有暴力法和分治法两种,首先介绍暴力法求解。1、暴力法根据第一题的启发,我首先想到(1)先设定初始sum值为0,再新开辟一个vector数组arr用于存放和值;(2)双层循环遍历数组,外层 i 从0到数组最后一个元素,将nums[i]即这个数本身给到sum,再将sum放入arr中;(3)内层循环 j 从 i+1 开始原创 2021-02-22 23:19:33 · 340 阅读 · 0 评论 -
数据结构基础——链表(学习篇)
数据结构基础——链表创建链表插入原理代码实现本次总结学习的内容是链表的构造,插入,遍历,删除,反转这些操作,首先学习的是链表的构造、插入、遍历、下面是实现它们的具体函数:创建链表首先是创建一个链表,在创建链表前线创建链表的元素,也就是链表的结点data记录结点的数据,next指针用来指向下一结点;_data作为一个常量初始化data。接下来就是定义链表类定义头指针,并在构造函数里初始化让他指向空,然后是析构函数,在析构函数里我们要删除整个链表,思路就是循环遍历每个结点,然后依次删除。cur原创 2020-11-11 17:39:54 · 388 阅读 · 0 评论 -
opencv基础入门大总结(一)(学习篇)
opencv基础入门总结(一)(一)opencv读取显示图片(二)基础色彩空间转换(三)图像对象的创建与赋值(四)图像像素的读写操作(五)图像像素的算术操作(六)键盘响应操作(一)opencv读取显示图片这个吧,真的就算是opencv中的hello world了,基本上都知道是imread()这个函数,但是这个函数中的参数,在不同情况下的使用,还是略有讲究的,需要大家在学习的时候有所注意。如果你只需要读入一张“常规的”图片(比如3通道8位,或是3通道24位,又或是一张灰度图),其实直接在“”中写入绝对原创 2020-11-02 10:13:18 · 2329 阅读 · 0 评论 -
Qt QString字符串截取
Qt QString字符串截取利用Qt,结合一些图像处理,做软件的时候,做基础的首先是读一个图片进来,经常需要用字符串存一下所读图片的路径,或者名称。所以经常会利用到字符串的截取,可以从整串路径中得到图片名。以下就介绍两个截取字符串的函数:mid()函数和section()函数mid()函数接受两个参数,第一个是起始位置,第二个是取串的长度。如果省略第二个参数。fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),filePat原创 2020-10-19 19:37:46 · 15544 阅读 · 0 评论 -
Qt5 opencv4 无法解析的外部符号问题(经验篇)
Qt5 opencv4 无法解析的外部符号问题这两天在做一个简单的打开本地图片的小功能的时候,在cvtColor的地方,总出现烦人的“无法解析的外部符号问题”,如下图:首先尝试了 清理项目重新构建的方式,但始终得不到解决,因为我的opencv版本从3.1换成了4.2,所以开始考虑是不是版本升级对于cvtColor函数本身使用带来了变化,再去查阅了解了函数本身之后,做如下改变:修改之后再重新清理项目,执行qmake,再次运行,得以解决问题!...原创 2020-10-15 10:44:21 · 1398 阅读 · 0 评论 -
0921每日一练——C++ 摩斯电码转换(学习篇)
设计一段程序,实现莫尔斯电码的转换如输入:123,打印出转换后的结果为.----…—…—答:其实逻辑上不是很复杂,但是涉及到很多字符串的细节操作问题,应用了之前讲到的memset函数,strcpy_s函数等,还学习应用了一些之前学到的c++中关于容器的知识,令我对这块的应用有了进一步的了解。具体实现代码如下://#include "stdafx.h"#include<iostream>#include<vector>#include<string>#i原创 2020-09-21 20:25:34 · 2703 阅读 · 1 评论 -
0907每日一练
0907每日一练某商店双11做活动,放出了N个特价商品,每个商品的价格为一个数字,排成一行,并制定了一条规则,相邻的特价商品只能买一个,请问,在满足这条购物规则的情况下,你购物的最大花销是多少钱某商店双11做活动,放出了N个特价商品,每个商品的价格为一个数字,排成一行,并制定了一条规则,相邻的特价商品只能买一个,请问,在满足这条购物规则的情况下,你购物的最大花销是多少钱如:输入: 4 11 13 3 1输出: 18 (4+13+1)答:看到问题的时候,我首先想到的是,把这些商品价格放入一个数组,原创 2020-09-09 18:49:12 · 779 阅读 · 0 评论 -
0905每日一练
0905每日一练strncpy strcpy memcpy strnprintf strlen 等字符串函数的用法和区别strncpy strcpy memcpy strnprintf strlen 等字符串函数的用法和区别答:(1) strncpy函数:strncpy 是C语言的库函数之一,来自 C语言标准库,定义于string.h,声明:char *strncpy(char *dest, const char *src, size_t n)参数:dest – 指向用于存储复制内容的目标数原创 2020-09-09 18:46:03 · 144 阅读 · 0 评论 -
0904每日一练
每日一练一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6 = 1 + 2 + 3。找出1000以内的所有完数?拆解问题:1、要知道一个数的因子都有哪些2、因子求和3、和与原数比较 是否相等解决问题:1、取余、循环2、循环中拿出因子叠加3、把加完的和与原数 判断遇到的问题:在双层循环中各种输出逻辑,拿到输出值之后思考为什么会这么输出,为什么没有得到想要的值,反复琢磨实现逻辑代码:#include<iostream>using namespace std;原创 2020-09-04 17:13:38 · 90 阅读 · 0 评论 -
VS2015 ‘localtime’ :this function or variable may be unsafe
VS2015 ‘localtime’ :this function or variable may be unsafe问题解决问题问题原因:C语言的标准函数中,一些读取或写入内存的函数存在内存越界的问题,从而使得内存数据变得不安全。如scanf、gets、strcat等函数都存在着这样的问题。为了避免这个问题,在VS2015中,另外提供了如scanf_s,get_s,strcat_s等相关的改进函数,来替代原来的标准函数的功能,并通过添加内存读取范围的限制来解决不安全的问题。在实际的应用中,也许原创 2020-09-01 21:08:39 · 898 阅读 · 0 评论 -
【opencv】imwrite使用小问题
【opencv】imwrite使用小问题问题描述解决办法问题描述一个很简单的程序在想要保存过程种的输出图像时出现错误解决办法出现这种错误的原因大部分是因为要保存的图片没有加后缀好吧,果然我还是粗心的,加上“.jpg”之类的图片后缀就OK了...原创 2020-08-27 16:47:17 · 268 阅读 · 0 评论 -
0825每日一练
0825每日一练1. main函数的参数和返回值有什么意义?2. 调用main函数之前发生了什么?1. main函数的参数和返回值有什么意义?答:main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。经常使用的void main( )其实是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 “The definiti原创 2020-08-25 21:42:03 · 105 阅读 · 0 评论 -
0824每日一练分享
typedef struct bb{int id; double weight; float height;}BB;typedef struct aa{char name[2]; int id;short score; short grade;BB b; }AA;这两个结构体 分别占用多大的内存,为什么?答:一开始单纯的以为是4+8+4,后来在查阅资料之后发现并不是这么回事,计算结构体大小时需要考虑其内存布局,结构体...原创 2020-08-24 22:19:52 · 98 阅读 · 0 评论 -
0822每日一练分享
0822每日一练分享1. 谈谈结构体和数组的相似点和区别2.执行下面代码后,数组里存放的值是什么1. 谈谈结构体和数组的相似点和区别答:数组是相同数据类型的元素按一定顺序排列而成的集合,是一种顺序表结构体。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。数组又可分为数值数组、字符数组、指针数组、结构体数组等各种类别。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体在函数中的作用最主要的就是封装。数组和结构体相似的地方是原创 2020-08-23 20:40:36 · 147 阅读 · 0 评论 -
【opencv】角点检测——虚线表格
【opencv】角点检测——虚线表格处理对象——虚线表格处理方法——角点检测Harris角点检测函数解读处理结果处理对象——虚线表格把之前做研电赛的东西做一点小的分享,先给大家看一下所处理的对象。可以看到我们所面对的表格具有特殊性和复杂性,表格线为虚线,且存在错位情况。在这种情况下想要准确检测出表格区域,并不是容易的事。我们需要对这种原始图像做较多的预处理,以达到去掉文字干扰的目的,下次的博客可以再对这块进行一个细致的说明。我制作了一张预处理之后的图片来做算法测试。处理方法——角点检测角点检原创 2020-08-23 11:32:05 · 1178 阅读 · 1 评论 -
C++调用tensorflow模型捕捉摄像头采集图像做物体检测-opencv4.2.0
C++调用tensorflow模型捕捉摄像头采集图像做物体检测-opencv4.2.0你需要拥有的基础主要操作流程遇到的问题你需要拥有的基础你需要拥有一个编译过的不低于3.3版本的opencv,一定要保证有opencv_contrib-4.2.0这个库,这是我编译好的opencv4.2.0的文件夹如果你的版本低于3.3,而你又不想重新换一个新的版本,那你就需要重新对contrib库进行编译,网上有各种不同版本的编译教程(但我觉得都挺蛮烦的,懒人一个了。。。所以还是找个高版本的吧)另外我的是win1原创 2020-06-23 16:57:27 · 803 阅读 · 0 评论 -
创建虚拟机并安装Ubuntu系统
创建虚拟机并安装Ubuntu系统微信公众号:软件安装管家 最近不能用了,找到以前一篇安装教程做个记录,以备后用。Ubuntu 18.0/64位下载地址:pan.baidu.com/s/11nR-Fwv22T_qP39u24TjKA提取码: fv6h1.选中【ubuntu】压缩包,鼠标右击选择【解压到ubuntu】。2.双击打开【ubuntu】文件夹。3.选中【VMware-workstation-full-14.0.0.24051】鼠标右击选择【以管理员身份运行】。4.需要等待一下。原创 2020-06-10 19:58:05 · 513 阅读 · 0 评论 -
Qt制作学生管理系统软件
Qt制作学生管理系统软件构建思路布局界面链接数据库(sqlite)在tableView上对数据表内容做显示可视化数据库操作(增删改查)众所周知,B站才是正经学习网站,感谢B站上的教学视频,如果想学习Qt的朋友,送上链接:https://www.bilibili.com/video/BV1XW411x7NU?p=74构建思路制作简单的学生管理软件,需要用到一个登录界面和连接数据库的相关知识,正好作为学习Qt的一个联系小题目。一些很基础的操作我就不再细说了布局界面界面1:学生登录界面,需要用到的有原创 2020-06-01 21:09:21 · 8213 阅读 · 5 评论 -
Windows 10配置tesseract—OCR
参考博文:https://blog.csdn.net/qq_43576028/article/details/102907170 亲测有效!然后附上可以识别中文和数字的包https://pan.baidu.com/s/1gWXsu9obIMK_pSFOn0hjNg提取码:papq原创 2020-05-30 11:18:22 · 583 阅读 · 0 评论 -
可以用来开发GUI界面的主流语言和平台(二)
可以用来开发GUI界面的主流语言和平台(二)二、C++(Qt creator)对于代码学习表达感谢:https://blog.csdn.net/yishuicanhong/article/details/80738361二、C++(Qt creator)本文承接上文介绍如何快速上手入门Qt开发(用一个自动绘制正弦曲线的的小例程做介绍)1、创建一个Qt工程项目你可以选择点击文件,然后新建工程,也可以直接New project,还可以直接open最近经常打开的工程文件选择应用程序,点击choos原创 2020-05-19 23:40:38 · 2508 阅读 · 0 评论 -
Qt5.9,VS2015,python配置opencv
常用软件opencv配置Qt5.9配置pythonVS2015配置Qt5.9配置1、先从opencv的网站上下载你所需要的版本(https://opencv.org/)本文中使用的是opencv3.1你可以选择把文件里的opencv文件单独拿出来放在C盘下,方便后面和我路径的一致(也可以选择不放出来,下面路径稍作修改)2、打开Qt,在对应项目文件的pro文件下添加如下代码:INCLUDEPATH += C:\opencv\build\include C:\openc原创 2020-05-19 23:04:05 · 472 阅读 · 0 评论 -
QT-C++调用Python文件,实现深度学习的交互调用
QT-C++调用Python文件,实现深度学习的交互调用李伯爵的指间沙 2020-05-12 09:34:54 42 收藏展开0.本机环境:WIN10*641.下载安装python3.7.4路径如下:C:\Python3.7.42.修改pro文件INCLUDEPATH += C:\Python3.7.4\includeLIBS += -LC:\Python3.7.4\libs-lpython37_d3.python文件修改4. C++调用#pragma push_mac转载 2020-05-17 23:52:32 · 1570 阅读 · 0 评论