- 博客(24)
- 收藏
- 关注
原创 makefile相关
是一个跨平台的构建工具,可以生成适用于多种操作系统和编译器的构建文件,如Makefile、Ninja构建文件、Visual Studio项目文件等。:是一个基于文本的文件,它直接定义了构建过程的规则和命令。当源文件或依赖项发生变化时,CMake能够重新生成必要的构建文件,并确保按照正确的顺序进行构建。CMakeLists.txt文件使用了更简洁的语法和更直观的结构,使得项目的构建过程更加清晰和可管理。:是一个简单的文本文件,包含了用于构建项目的规则和命令。目标,用于删除所有生成的对象文件和二进制文件。
2024-08-11 16:54:27
758
原创 CMAKE的用法
CMake是一个开源、跨平台的自动化构建系统,它使用CMakeLists.txt文件来描述项目的构建过程,并生成标准的构建文件(如Makefile或Visual Studio项目文件),然后依据这些文件来构建项目。
2024-08-11 13:46:10
228
原创 DLL总结
DLL是一种包含可由多个程序使用的代码和数据的库,这些库包含程序运行所需要的函数和资源,程序可以在运行时动态链接到这些库,其主要作用包括:(1)代码重用:DLL允许开发者将代码组织成可重用的组件,一旦一个DLL被开发并测试过,它可以被多个不同的程序使用,这节省了开发时间,实现了可重用,提升了代码质量;(2)模块化:通过将程序的功能划分为不同的DLL,可以实现代码功能的模块化,实现了功能之间的独立性,降低了代码的复杂性,易于维护;
2024-07-14 11:55:11
1001
原创 QT中的QDir中的mkdir和mkpath的区别
类的方法,用于创建目录,但它们在处理多层目录的创建时有所不同。:两者都用于创建目录。这个父目录目前不存在。
2024-06-22 15:28:48
971
原创 LINUX常用的命令
(1)ls:查看当前路径下的内容,对于目录,列出该目录下的所有子目录与文件。(10)netstat anp | grep 8080:查看8080端口的占用情况;(4)touch【文件名】:若文件不存在,自动创建;(12)kill:用于删除正在执行中的程序或者工作;(11)ps:列出系统中正在运行的所有进程;(5)mkdir【目录名】:创建目录;(13)cat:查看目标文件的内容;(6)rm【文件名】:删除文件;(9)netstat:查看端口;(2)pwd:查看当前路径;(3)cd:跳转至目标路径;
2024-04-05 23:02:48
122
1
原创 C++中的数据类型转换
(1)静态转换,编译期间就完成的转换,用于将一种类型的值转换为另一种相关类型的值(比如char转int,int转double)。b. 如果目标类型指向的对象类型与源类型指向的对象类型不同,则将源类型的值转换为void*类型,然后转换为目标类型的值;该运算符可以用于去除基本类型的值的const属性,也可以用于去除指针类型的值的const属性。a. 如果目标类型指向的对象类型与源类型指向的对象类型相同,则将源类型的值转换为目标类型的值;(1)动态类型转换,转换是由运行时系统执行的,而不是由编译器执行的;
2024-02-06 16:49:10
822
1
原创 对多线程中互斥锁的一些理解
(3)std::try_to_lock:这和mutex中的try_lock方法作用类似,就是在创建unique_lock时,判断资源是否已经被锁住,如果已经被锁,那就返回false,并不阻塞当前线程,如果没被锁住,则成功锁住该资源;(2)std::defer_lock:这通常用于在创建unique_lock时,并不直接锁住资源,而是需要在后续的流程里面手动去上锁,但是在上锁之后,无需手动释放,在其作用域结束时,会自动释放锁;(1)lock,锁定资源,如果资源已被其他线程锁定,则当前线程阻塞;
2024-01-25 23:10:27
484
原创 对移动构造函数的一些理解
为了应对拷贝构造所来的问题,移动构造函数实现了一种资源转发的逻辑:具体的思想就是将原对象的指针赋值给新对象,即新对象在源对象的内存空间上以源对象的数据为基础进行构造,以此实现了一个与原对象数据属性相同的新对象,之后再将源对象的指针指向空地址即可;移动构造函数提出的本意,就是为了应对拷贝构造函数所带来的内存空间占用:因为如果要通过拷贝构造函数来创建一个与源对象一模一样的对象,那么需要申请一块同样大小的内存,当源对象本身比较大的时候,这一操作将会导致内存消耗比较严重;
2024-01-25 00:59:20
404
原创 C++中模板的使用
如下是一个函数模板和类模板使用的demo, 对于函数模板来说,模板的数据类型针对函数中的入参,对于类模板来说,模板的数据类型针对类中的成员变量,具体的数据类型,由传入的数据决定。
2024-01-23 23:05:04
466
1
原创 力扣热题之螺旋矩阵
如上,输出数据为{{1,2,3,4},{5,6,7,8},{9,10,11,12}}:输出结果为: 1 2 3 4 8 12 11 10 9 5 6 7。
2024-01-23 15:41:36
395
1
原创 对于static的理解及应用
3.static修饰的局部变量,其生命周期与代码文件的运行和终止同步,不随着函数的调用结束而消亡;4.static修饰的成员变量,属于类变量,被类的多个对象共用,也可以直接通过类名调用;1.static修饰的全局变量只能在本文件中被调用,存储在全局区,全局函数也一样;6.在修饰函数时,static不能与const共用,因为const针对的是对象;2.其他文件若想调用,可以封装一个函数来调用它,在其他文件中调用该函数;5.static修饰的成员函数,只能操作静态成员变量;
2024-01-19 11:53:58
332
1
原创 力扣热题之-最长非重复子串的长度
2.在1中的操作执行时,会顺便判断新遍历到的元素是否存在于 unordered_map中,此处用到unordered_map的find方法,该方法会返回传入的key对应的迭代器,其中first代表key,second代表value,找到之后,则将非重复子串的起始下标置为,已存在的重复元素的索引和目前的起始索引取极大值的结果(避免取到已经作废的下标);1.维护一个子串起始索引和最大子串长度,循环遍历字符串,将遍历到的每个元素加到unordered_map中去,key为string中的字符,value为索引;
2024-01-19 11:46:29
390
1
原创 工厂模式的一些理解
3.抽象工厂模式更像是前面两者的结合,每个层级或者族类,对应一个抽象工厂,每个抽象工厂,能够创建同一层级的不同对象。工厂模式的意义,就是通过工厂来创建对象,将创建对象的方法封装在工厂中,可以不用直接调用构造函数创建对象。2.工厂方法模式:多个工厂,每种产品对应一个工厂,需要哪种产品,直接用哪种工厂来创建。1.简单工厂模式:一个工厂,根据传参不同调用不同的构造函数。
2024-01-13 22:40:23
416
1
原创 SQL知识点
个人理解:一种有序的数据结构,可以映射到具体的数据,方便根据其快速的查找对应数据;(1)INNODB支持主键外键,事务,行级锁,不仅缓存索引还缓存数据,表空间大;(2)物理存储角度:(1)聚簇索引;(2)MYISAM不支持主键外键,事务,行级锁,只缓存索引,表空间小;(6)执行器:先判断用户权限,有权限则使用存储引擎提供的接口;优点:加快查找,降低IO成本,降低排序成本,减少CPU消耗;分类:(1)数据结构角度:B树,B+树,哈希;(7)存储引擎:存储数据,提供读写接口;(4)分析器:词法分析和语法分析;
2023-12-27 09:25:51
51
1
原创 关于C++多态的一些理解
(2)当子类继承父类时,会复制一份父类的虚函数表,同时由于其重写,则会将表中虚函数的地址替换为重写后的虚函数的地址(虚函数也存放在代码区),至于子类独有的虚函数,其地址也会加在虚函数表中;(1)当一个类包含虚函数时,相应的会有它的虚函数表(事实上是一个数组,其中存储着虚函数的地址),在类实例化为一个对象时,会产生一个虚函数表指针,该指针指向类的虚函数表;(2)动态多态:通过继承来实现,派生类继承并重写基类的虚函数,当通过基类的指针来调用该虚函数时,调用的为派生类的函数,动态多态,在运行时实现;
2023-12-09 00:28:34
53
原创 关于C++多线程的一些总结
在资源竞争激烈时,长时间的忙等待,占用CPU,造成CPU的浪费,影响系统性能,解决方法:设置自旋时间,忙等待一定时间后,释放CPU;在资源竞争不激烈时,处于自旋状态的线程对于CPU持续占有,避免了线程在阻塞和就绪之间的切换造成的资源浪费;
2023-12-09 00:12:46
57
原创 数据结构常见的排序算法
循环比较,每轮中从第一个元素开始,与其相邻元素比较,得到更小或更大的一个,交换位置至后面,再与下一个相邻元素比较,一轮比完即可获得一个极小值或者极大值放在末尾,继续重复之前的操作,直至每个数都到最终的位置。每轮中从第一个元素开始,与其相邻元素比较,得出最小值,将最小值与第一个元素交换位置,再从第二个元素开始比较,得出次小值,与第二个元素交换位置,以此类推,最终将所有元素归位。
2023-10-08 00:17:34
53
1
空空如也
vs2019 点调试,系统找不到指定文件
2024-10-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人