自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++面试题总结

STL包含六大组件:容器、算法、迭代器、仿函数、空间置配器、适配器。对 vector、deque 或 list 进行封装。常用的有:sort、reserve、sum、find。存放全局及静态变量,又分为两块。1. c++ 内存模型。

2025-03-22 17:24:46 276

原创 54. c++类型转换

c++是强类型语言,它有自己的类型系统,隐式类型转换时在类型转换是类型自动转换且数据不丢失,显示类型转换是指定转换类型;在c风格的类型转换中 ,如下代码进行转换。优点是有编译和运行时检查,减少强制类型转换时意外错误,如类型不兼容等;还能够根据名称搜索何处使用了类型转换(c风格的转换无法搜索),但一般来说,能不用就不用,容易导致 未定义行为(UB),const_cast会在后续学习中描述。其中dynamic_cast需要 父类中有虚函数,因为。

2025-02-19 17:54:14 294

原创 53. 虚析构函数

在前面的学习中‘17 构造与析构函数’及‘18 继承’中描述了虚函数和析构函数,这里我们学习一下虚析构函数,以下是在继承关系中,不同构造对象的方式及析构结果。

2025-02-19 16:19:20 394

原创 52. 类型双关&union

可以看到,类型双关的操作先把一个int类型指针转为double类型指针,然后解引用。结果是在原来的int内存之后继续了4个字节,然后获取整个内存,结果打印的地址并不理想,有可能造成崩溃,这样的类型双关操作不安全。需要做的就是将原来的指针转换为另一个类型的指针(结构体e的指针转化为数组的起始指针),然后作为另一种类型去访问它(作为数组类型去访问)。union关键字使得不同类型成员变量共享同一块内存,这运用了类型双关的概念。可以看到我们能够自如的操作c++的内存,

2025-02-19 11:35:37 405

原创 51. c++的排序

【代码】51. c++的排序。

2025-02-16 21:43:59 105

原创 50. c++多维数组

在‘19 数组’中描述了原生数组的本质和其索引的原理,数组是连续的一个内存块,本质就是指针,指向这个内存块的起始位置,索引的原理就是对该指针的操作。通常对数组的操作一种策略就是使用指针,二维数组可以说是数组的数组,第二维数组存储了每个指向第一维数组的指针,并可以对其进行操作。在堆上创建的数组内存不连续,程序效率较低,若一维数组可以满足需求,优先选择一维数组。

2025-02-16 20:41:32 152

原创 49. c++计时器

为了测试某段特定代码的执行时间,体现代码的性能,可以使用计时器对代码段计时。对于实际执行基准测试来说,这个方法还是比较粗略的,后续的学习中会继续描述具体在vc工具中基准测试、性能测试的方法。

2025-02-16 11:03:21 241

原创 48. c++线程

c++多线程实现使用标准库中的<thread>,一下代码描述多线程实现方式 ,最简单的线程创建方式是通过传递一个可调用对象(如函数指针、函数对象或 Lambda 表达式)

2025-02-14 17:27:38 364

原创 47. using namespace

两个命名空间都有同名函数print时,编译并不会报错,但运行时可能就会出现意外结果。此外使用std命名空间时,相关的标准库下的代码可读性降低,不易分辨string所属。尤其是在大型项目中,使用namespace会包含进来许多函数,容易造成混乱。因此避免使用namespace。

2025-02-12 22:07:34 117

原创 46. lambda表达式

lambda是定义匿名函数的方式,在‘45. 函数指针’中提到了lambda的使用,只要是需要使用函数指针的地方(如传入函数指针作为形参时)都可以使用lambda表达式编写。捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。比如:[=, &a, &b]:以引用传递的方式捕捉变量a和b,值传递方式捕捉其他所有变量。[&,a, this]:值传递方式捕捉变量a和this,引用方式捕捉其他变量。

2025-02-12 16:52:03 742

原创 45. c++函数指针

在‘12 指针’中描述了指针的本质,就是一个内存地址(一串数字)。函数在编译时会被编译为cpu指令,然后存储在可执行文件exe中。而函数指针就是这些指令的地址,是将一个函数赋值给一个变量。

2025-02-12 15:37:42 140

原创 44. std::array(静态数组)

vector是一个动态增长的数组,而array的大小一开始要给定一个值,不能动态增长,又称为静态数组;vector内存分配在堆上,array在栈上。‘35. c++动态数组std::vector’ 中介绍了vector的内容,它是标准模板库STlL的一部分。因此原始数组和array两者中优先选用array使用,它有更多api,且它的内存地址连续,速度也比较快。查看array源码可以看到,它是一个模板类,数组大小size就是一个模板参数。

2025-02-12 11:19:28 171

原创 43. auto关键字

在实际开发场景中,会用到较长的类型,如下的vecotr迭代、map获取等,此时使用auto就可以大大减少类型长度简化代码;当然也有别的方式,如使用using、typedef定义类型,但相比auto来说,需要重新定义,并不是最优的方法。当然也存在一些问题,改变函数返回类型后,调用处所依赖的具体的api,此时代码就会被破坏;当鼠标悬停到name变量上时显示类型为std::string,auto的优点在于当需要改变功能函数返回类型时,无需二次更改调用代码。注意:使用auto接受类型时,加上引用&避免产生复制。

2025-02-12 10:08:44 299

原创 42. c++宏

宏的定义使用#define ,在预处理过程中会把使用宏的地方替换为定义的具体内容,这与‘40. c++模板’中描述的模板有区别,模板是在调用的时候才会实际生产,而宏是在预处理时期进行替换。下面是一个简单的宏使用案例。具体的使用,如在日志系统中,针对不同的开发模式需要记录不同的内容,下面演示对于debug和release下使用宏完成不同日志内容的记录。在代码中分别对PR_DEBUG为不同值时进行日志打印。这样使用宏LOG时会在不同模式下记录不同的日志内容。release模式下,则执行另外的日志。

2025-02-11 16:31:19 119

原创 41. c++栈和堆内存的比较

应用程序启动后,操作系统会分配一些必要的内存空间供程序使用,其中堆和栈内存是主要关注的部分。在c++中,栈内存一般是预定义的内存区域,通常为2M字节大小;堆内存预定义了一个默认的区域,但大小可以增长随应用程序的进行改变。二者的工作方式不同,尤其是分配内存的方式。以如下代码为例,进行详述。

2025-02-10 17:33:20 156

原创 40. c++模板

模板是c++中泛型编程的基础,是c++支持参数化多态的工具,stl也是基于模板实现的。将类或函数声明为一种通用的模式,实现一个功能函数满足任意类型参数的需求。分为函数模板和类模板;

2025-02-10 14:31:44 198

原创 39. c++处理多返回值

通常函数接口只能返回一种类型,当我们需要返回多种类型时有一些方法可以参考。借助结构体返回多个不同类型的值,在get数据时也比较清晰。这种方式在取数据时对于参数名成不明确,造成代码混乱。如果多个类型相同时可以用数组。

2025-02-10 09:55:04 208

原创 38. c++创建和使用库

将一个项目创建为库的形式,在大规模的项目中有利于模块化管理和后续的重复使用。下面描述怎样将c++项目创建为库。

2025-02-08 15:46:57 195

原创 postman使用简介

下载后可以打开界面,可以填入远端数据库地址,在body中填入要查询的dbname及key点击send即可查询。在使用非关系数据库,与远端数据库交互时,需要在本地测试程序逻辑。借助postman查询数据。绑定资源中,有如下应用程序,双击后可开启数据库服务。2、使用postman。

2025-02-08 14:14:33 289

原创 37. c++使用动态库

同时编译这两个文件是重要的,因为如果尝试使用不同的dll.lib,二者不对应那么在运行时连接dll会得到不配的函数和错误类型的内存地址,函数指针不会正常工作。这是因为静态库文件已经添加,所以编译没问题,而程序启动时链接不到静态库中所指向的函数,2、在可执行程序的目录下添加相应的dll文件。静态链接是在编译时发生的,将库中的内容都复制到了可执行文件中,经过了编译器和链接器的执行流程,会发生优化;‘36 c++使用静态库’中描述了静态库的使用方法,这里将描述动态库的使用。添加后执行成功打印结果 1。

2025-02-08 13:57:43 292

原创 36. c++使用静态库

链接的过程分为静态链接和动态链接,静态链接意味着这个库会被写入可执行文件exe中,动态链接是在运行时被装载链接的,有一个loadLibrary()函数会载入动态库,调用函数;使用这个库时,需要在vs中添加外部库的依赖,右键工程properties,如下图,选择与库二进制文件对应的platform32位,然后添加库的相对路径。include中是头文件,声明了我们可以使用的函数,lib文件夹是链接时用到的库,定义了头文件中的函数,以供链接调用执行。

2025-02-07 17:09:49 390

原创 35. c++动态数组(std::vector)

vector在c++的标准模版库STL中,STL中包含了很多容器的数据结构,后面会详细描述。vector(向量)它其实是一个arraylist,并且数组大小是动态变化的。一般情况下元素不为指针时,它的内存时连续的。以下为vector简单使用例子,

2025-02-06 21:17:59 161

原创 34. 重载箭头操作符

创建指针对象时,我们通常会使用箭头操作符访问变量或函数,在某些情况下我们需要重载箭头操作符以便于变量或函数的访问。如下所示,在一个简单的作用域指针对象ScopedPtr中,想要访问Entity中的函数时,直接访问编译报错,要么还需要再添加一个getMObj(),这样会使得代码复杂混乱。利用箭头操作符得到变量的偏移量,当我们处理一些字节流等我们可以便利的查看它们的偏移量。想要想绿色框中一样简洁访问Entity中的函数,那么我们需要重载箭头操作符,如下。下面是一个箭头操作符的使用功能案例,

2025-02-06 17:10:32 173

原创 33. c++复制与拷贝构造函数

当我们执行复制操作时,两个字符串类对象指向了同一个mBuffer的内存地址,析构函数调用了两次,在释放内存时就会释放两次,导致程序崩溃。而我们真正要做的是给第二个字符串类对象分配一个新的char数组,来存储复制的字符串,而不是上面的浅拷贝,下面重写拷贝构造函数,实现深拷贝。使用另一种方式打印字符串,可以看出拷贝函数被执行了多次,这会导致新建多次内存,降低程序运行效率。因此为了优化程序,我们在编程时要使用const引用传参,避免产生深拷贝,降低效率。33.1 深拷贝与浅拷贝。33.2 字符串的拷贝。

2025-01-25 14:44:08 265

原创 QT使用httplib上传表单数据formdata

ImageFile 字段 为要上传的文件内容。2.1 将http url等相关配置到文件中。2.2 使用httplib接口,先引入头文件。

2025-01-24 16:47:58 162

原创 32. C++智能指针

原始指针new创建后,需要delete手动释放内存,智能指针能够实现自动化管理,它对原始指针进行包装,自动调用new分配内存,自动释放。下面描述几个智能指针。

2025-01-07 15:17:53 310

原创 c++基础学习1-32

因此为了更加方便的使用声明的函数,会将函数声明放入头文件中,cpp文件中存放头文件中声明的函数体。链接器会将所有的obj文件链接在一起,当然也可能会链接到c++运行时库等一些其他的外部信息,还分为静态链接和动态链接,将在后面的内容中详述。

2025-01-07 15:17:51 1110

原创 31. c++的对象生存期

createArr中创建的arr已经随着函数 createArr()结束而被销毁,虽然内存被销毁但创建的值还未被清除,此时访问还可以打印。但当再次使用栈创建变量时,如使用createArr2在栈上创建arr,此时a的值就被清除掉了。此外,由于栈上创建的变量仅在一定作用域内存在,所以日常编码中要注意避免栈的错误使用。利用栈在作用域中存在,离开作用域会自动析构被销毁的特性,我们可以写一个类似智能指针的功能,以下为简单案例。在c++中 栈上定义的变量只在作用域范围内存在,超出作用域将被销毁。

2025-01-04 16:58:31 209

原创 qt工程部署

导入qt工程后,运行目录下缺少dll等文件,需要重新部署。使用以下命令(以release为例)

2024-12-27 17:04:20 93

原创 cmake添加新库

注意这里有将库的dll文件自动添加到运行目录下的命令,当其他人从git中拉取代码并编译后就无需手动将这个库的dll拷贝到运行目录下。在qt编码中,如果需要用到第三方库,那么我们需要下载相关库的源码,编译后使用到项目中。同时在cmake中进行相关配置,一下以一个qt中解压缩库quazip为例进行详述。

2024-12-18 16:26:34 161

原创 QT集成aws-cpp-sdk及开发S3接口

aws即Amazon Web Services,S3是aws提供的一种持久性、高可用性、可扩展的对象存储服务,用于检索和存储大规模的数据对象、如文件、图像、视频等;应用于数据存储和管理、备份和恢复、数据归档和大数据分析等多个领域,下面描述QT中S3接口的开发流程。

2024-10-28 17:53:18 639 4

原创 LeetCode两数之和

这里用了 std::unordered_map ,是因为它查找速度快,内部是哈希表。当遇到需要查询操作较多的情况,可以使用unordered_map,当需要排序时使用map。嵌套循环,第一层遍历取数组值,第二层遍历 计算和 找到目标.时间复杂度O(N2),空间复杂度O(1)但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。一边找一边存储,时间复杂度O(N),空间复杂度O(N) [map中的哈希表]整数,并返回它们的数组下标。

2024-05-23 16:34:58 302 1

原创 QML手写一个柱状图组件

先展示最终效果:图1 初始图 图2 滑动展示。

2024-04-03 15:50:50 476 1

原创 QML日历功能+显示日期

【代码】QML日历功能+显示日期。

2024-01-23 14:10:14 730 1

原创 QML 输入+搜索框

【代码】QML 输入+搜索框。

2024-01-20 16:06:12 482

原创 QML 数据列表

带有表头的数据列表,完整代码如下。

2024-01-20 15:59:47 486

原创 QML分页导航栏

效果:可修改控件颜色。

2024-01-20 15:39:42 523

原创 定位保存成功文件的位置

file为要保持的位置,执行后将自动跳转到file所在路径并高亮该文件。

2024-01-18 17:23:05 438 1

原创 opencv基础

参数的使用影响检测结果。将一组图片水平排列进行拼接,所有图片的宽度之和作为拼接结果图的长,所有图片中最大的长作为结果图的宽。通过trackbar来调整阈值,观测目标颜色的选中情况,从而选定最值(注意,目标要以白色为准)。关键在于像素点的选取、旋转矩阵的应用及warpPerspective()函数的使用。黑框中持续打印滑动条的选值,选出颜色笔后便可使用打印出的hsv最大最小值;关键在于hsv三类最值的选取以及inRange()函数的使用;先选定颜色的阈值:ColorPicker;其中:点排序前后如下。

2023-11-21 18:01:00 99 1

原创 c++ QNetworkAccessManager及poco 两种方式上传文件到ftp Server

c++ 上传文件到ftp Server

2023-11-18 15:08:54 564 1

启动本地数据库资源相关程序

本地使用postman时,需要先开启数据库端口

2025-02-08

QT使用httplib上传表单数据formdata

httplib接口

2025-01-24

qml数据列表+按日期、关键key搜索+分页

使用qt+qml编写的数据列表展示功能,包括按日期查询数据、按关键key查询数据以及分页功能

2025-01-22

aws-s3-sdk及在visual studio中使用说明

包含debug、release、releasewithdebug的库资源及在visual studio中引入的说明

2025-01-04

awss3上传文件demo

QT中使用awss3上传文件简单demo

2025-01-04

完整awss3接口封装类

完整awss3接口封装类

2025-01-04

AWS-S3接口Demo

AWS-S3接口Demo

2024-10-28

AWS-S3接口Demo

AWS-S3接口Demo

2024-10-28

QML日历+选定日期显示

自定义日历控件+选择后显示选定日期

2024-01-23

QML 输入+搜索Demo

QML 输入+搜索Demo

2024-01-20

QML + 数据列表Demo

带有表头的数据列表

2024-01-20

QML + 日历功能Demo

点击按钮选择时间,显示所选时间

2024-01-20

QML+ Tab控件Demo

QML+ Tab控件Demo

2024-01-20

QML + 分页导航栏 Demo

再QML中当查询数据较多,需要分页展示时可使用改控件,可根据需要修改颜色等信息

2024-01-20

空空如也

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

TA关注的人

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