- 博客(51)
- 收藏
- 关注
原创 一纸文书之MySQL的回忆录
英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。执行顺序?1.from2.where3.group by4.having5.select6.order by7.limit..多条DML语句同时成功,或者同时失败!就是批量的DML语句同时成功,或者同时失败!索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。
2023-07-09 18:27:33
1149
原创 一天学完Java,主要记录difference
开发过程中,可以自定义异常。因为官方给的一些异常多数是通用的,没有一些专门针对特点需求的异常。有时候,我们就是需要抛出一些非常显眼,让开发者一眼就知道是什么bug的异常。这时候就可以自定义异常。继承自Exception:把自定义异常声明为检查型异常,使用起来代码会稍微复杂,希望开发者重视这个异常,并且认真处理这个异常。继承自RuntimeException:把自定义异常声明为非检查异常,使用起来代码会更加间接,不严格要求开发者去处理这个异常。
2023-06-18 17:53:49
1774
原创 数据结构学习之路-集合
因此,集合在实现add方法时,直接调用红黑树的add方法就行了,不用做任何额外操作。因此,红黑树真的很强。,集合也是直接调用链表的接口,因此搜索来说,是O(n)级别的;集合不允许有重复的元素存在,因子当新添加的元素已经存在集合中,就会去重。用红黑树来实现集合,也就意味着,我们集合中的所有元素,本质上是在红黑树上。使用红黑树实现集合的一个最大限制就是:添加进集合的元素,必须具备可比较性!可以实现集合的数据结构有很多,比如:动态数组,链表,红黑树。,集合直接调用红黑树的接口,因此复杂度都是logn级别的。
2023-05-23 21:08:19
560
原创 数据结构学习之路-二叉树
注意哦,左子树和右子树也要遵循前序遍历的原则。很容易想到递归求解,传入的参数是根节点,这里我们访问形式选择的是打印,然后依次前序遍历左子树(传入的参数顺理成章的就是左子节点),最后前序遍历右子树(传入的参数就是右子节点)
2023-05-07 22:17:45
1172
1
原创 一天学完C++的标准模板库STL
deque内部重载了多种构造函数,因此依然有很多种初始化方式// 默认构造函数 deque(beg , end);// 构造函数将[beg, end)区间中的元素拷贝给本身 deque(int n , T elem);// 构造函数将n个elem拷贝给本身 deque(const deque & deq);// 拷贝构造函数这里就不一一介绍了,因为这种初始化方式跟vector。
2023-04-14 19:56:28
1508
原创 将Linux服务器上的项目上传至Github
1、这个链接怎么来的:git@github.com:XHB-ZMM/BTrans-with-LC-for-UnbiasedSGG.git。原因是,我上传完第一个之后,我在github里自定义添加了一个readme文件,导致和本地不匹配了。在上面,我上传了一个文件夹到github。我还想上传一个文件夹,怎么办呢?add之后不会有反应,只有commit之后,才会真正的create mode这个些文件。我把github那个readme删除了,再次上传,就成功了。5、失败了,就清除.git文件,然后重新来。
2023-04-10 15:43:03
947
原创 数据结构学习之路-队列
队列是一种特殊的线性表,只能在头尾两端进行操作。队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队队头(front):只能从队头移除元素,一般叫做deQueue,出队先进先出原则,First In First Out,FIFO。
2023-03-27 22:25:43
721
原创 数据结构学习之路-栈
栈----------是一种特殊的线性表,只能在一端操作,有栈顶和栈底的概念往栈中添加元素的操作,一般叫做push,也叫做入栈从栈中移除元素的操作,一般叫做pop,也叫做出栈(注意:每次移除元素,只能移除栈顶元素,也叫做弹出栈顶元素)。下图是一个入栈和出栈的过程,可以看出,元素是一个一个push进栈底,但是当出栈的时候,是从栈顶开始pop。注意:这里说的“栈”是一种数据结构的称呼,而“栈空间”是内存的概念。这两个是不同的概念,但是却有关系,这里先不提及。
2023-03-25 14:43:55
497
原创 C++学习之路-异常(exception)
首先我定义一个异常的基类,是我整个项目可能存在的所有异常的基类。// 所有异常的基类 class Exception {public ://异常发生时,说出到底是什么异常,这里写一个纯虚函数 };//除法异常 class DivideException : public Exception {public :return "不能除以0";} };//加法异常 class AddException : public Exception {public :return "加法操作出现异常"...
2022-09-01 15:34:24
1051
原创 Interactive Tools Recommendation System integrating QT/ROS /Pytorch
这样就在src文件中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。信号和槽的绑定:currentIndexChanged(QString)是固定的信号,不可以更改,传入的是QString,也就是我们在下拉菜单中选择的具体字符。项目建完之后,比较重要的一步就是要配置刚才的ROS节点,只有配置了这里的ROS节点,ROS和QT Creator才可以正常通信。槽函数的声明,接受的const QString &类型,因为我们要得到具体任务的信息,也就是具体字符信息。...
2022-08-31 11:46:57
819
原创 C++学习之路-Lambda表达式
但是表达式,需要一个返回值指向这个表达式,也就是函数指针。通常我们采用auto直接指向,省事。然后,我们调用这个表达式的时候,就像函数一样:需要传入参数列表把mutable去掉,在表达式内部就不可以修改a或b的值。如果我在函数内部并没有修改a的值,那么mutable就可以省略,如果有修改捕获值的需求,那就得需要加上mutable。如果真的想修改a或者b的值,且不想用mutable,那就得采用引用传递了。因为,表达式中的捕获列表。......
2022-08-29 22:16:27
532
原创 C++学习之路-C++11的新特性
结果是执行的整型函数,因为NULL=0。C++11修复了这个bug,我们可以通过传入nullptr,达到调用第二个的目的。这属于编译器特性,不影响最终的机器码质量,不影响运行效率。意思就是写auto和写int,生成的二进制代码一样,只不过auto更华丽一些。因此,我们在本节讲述C++11标准相对于C++03所引入的新特性。因为NULL其实就是数字0,整型数字:0。下面举个例子说明:定义两个重载函数,一个传整型,一个传指针。所以说,nullptr是专业的空指针,NULL是专业的0和不专业的空指针。...
2022-08-29 15:58:40
348
原创 C++学习之路-类模板之泛型动态数组的实现
由于array是const类型的,所以array调用的所有函数都得是const成员函数,因此必须要额外将原本的成员函数变为const成员函数。比如,泛型类中的指向数组的指针类型。需要注意的是,没有类模板的时候,类名后面是不需要加< Item>的,一旦有了泛型之后,类名就和泛型绑定了,在每一个函数都要加。首先需要,声明一个动态数组类,成员变量包含:指向数组首元素的指针变量、当前数组的长度、初始化数组的容量。另一种做法不需要这样,那就是将函数变为友元函数,然后调用直接调用可以实现相同功能的成员变量即可。....
2022-08-26 20:57:47
1268
原创 C++学习之路-编译链接的细节
很多时候,我们会将函数的声明和实现分离。函数的声明通常声明在.h文件中,函数的实现通常实现在.cpp文件中。比如,我们想要定义两个数的加法运算,就可以这样写:在add.h中声明函数在add.cpp中实现函数我们知道,这样肯定没问题。但是,我们了解了模板,掌握了泛型的概念。可以用模板来优化函数重载,于是我们可能就会这样改进上述代码:在add.h中声明模板在add.cpp中实现模板此时,我们想要使用该模板函数,只需要在使用文件中引入add.h即可。...
2022-08-25 20:19:10
498
原创 C++学习之路-Template模板
了解模板之前,先了解一个概念:泛型。泛型,实质上就是不使用具体数据类型(例如 int、double、float等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。是一种将类型参数化进而达到代码复用的技术,强调的是,在C++中是使用模板来实现泛型。typename 后跟的“T”只是一个占位符而已,是自定义的,可以改成任意字符,只需要全部统一即可。但是,尽量统一,不要乱写符号,尽量写成T,因为T可以认为是Type的简称。}
2022-08-19 17:11:53
472
1
原创 C++学习之路-运算符重载
想要自由的定义运算符的左边是谁,右边是谁,那就需要定义为全局函数。如果该运算符仅仅跟某个类相关,那就优先定义为成员函数。如果实在不可以重载为成员函数,那就全局函数并且设置为友元函数。如果将运算符重载函数设置为private私有,那么外部就不可以实现运算符的重载。比如:ostream类下的cout对象即使返回的不是const类型,也不可以被赋值,就是因为C++内部将ostream的赋值运算符重载为private了。单例模式要求类外只能创建一个对象。即使我创建两个对象,这两个对象也是同一个对象。...
2022-08-15 16:25:44
1296
原创 C++学习之路-友元
允许访问类的私有成员的函数,叫作该类的友元函数。friend 返回类型 函数名(参数列表);int m_x;int m_y;public :;} };友元函数必须写在类的大括号里面,至于写在private、public、protected哪个下面,都无所谓。将函数声明为该类的友元函数,也就意味着该函数是该类的朋友,那就可以随意访问该类的私有成员变量了(可以访问所有成员,包括public和protected的)。想要某个函数可以访问类中的私有成员,就设置为友元函数。...
2022-08-04 16:32:56
440
原创 C++学习之路-编译器自动生成的构造函数
在该类中,我声明一个空的虚函数。创建对象时,也会调用构造函数。意味着,编译器也会默认的创建一个无参的构造函数public :} };我们通过查看构造函数内部,发现存在这样的一个操作:将虚表地址放在对象内存的最前面,用于查找虚表(细节可以查看我之前的博文)博文中:一旦类中有虚函数,创建对象时,对象最前面会多出四个字节存放虚表地址类中存在虚函数时,即使不写构造函数,编译器也会默认的生成一个无参的构造函数,从而在函数内部完成虚表地址的存放。......
2022-08-03 17:37:37
1417
1
原创 C++学习之路-隐式构造
字面意思可以理解,我在创建对象的时候,本意不是想调用单参数的构造函数,但是由于我代码书写的原因,偷摸的调用了单参数的构造函数。上面那种荒唐的写法虽然没有错,但是会隐式的调用单参数构造函数,这其实是我们不想看到的。用explicit关键字修饰单参数的构造函数,表明这个单参数的构造函数不允许隐式构造,即不允许直接将单个值赋值给对象。构造函数分为无参构造函数,和有参构造函数。注意看这句代码,将一个int型的变量,传递给对象p4,看起来很荒唐。因为,表面上,我们看不出来这句代码在调用构造函数,才叫做隐式构造。...
2022-07-27 17:42:31
1846
原创 C++学习之路-对象类型的参数和返回值
尽量不要将对象作为函数的返回值,尽量不要直接将对象作为函数参数传递。返回值尽量不要用,对象作为参数时,要用引用或者指针,而不是直接对象值传递。不要用的目的就是,避免产生一些中间变量(也就是拷贝操作产生的多余变量).........
2022-07-27 10:23:50
979
3
原创 C++学习之路-拷贝构造函数
拷贝构造函数也是构造函数的一种。普通的构造函数可以是无参的,也可以是有参的。但是拷贝构造函数必须是有参的,如下所示,参数就是const类型的对象引用(格式固定,别问为什么)我们知道,当创建对象的时候会自动调用构造函数。那什么时候会调用拷贝构造函数呢?答案是:当利用已存在的对象创建一个新对象时(拷贝对象),就会调用新对象的拷贝构造函数进行初始化新对象的成员变量。拷贝对象,拷贝了什么?利用已经存在的对象去创建新的对象,叫作拷贝操作。拷贝对象,也就是拷贝了对象内存里的东西,也就是拷贝了原有对象的成员。用一
2022-07-07 21:14:42
6736
3
原创 C++学习之路-const成员
被const修饰的成员变量和非静态(static)成员函数,都叫作const成员。const成员变量必须初始化(必须类内部初始化):可以在声明的时候,直接初始化赋值如果不初始化,构造函数会报错:未提供初始值设定项构造函数初始化列表上面两种初始化方式,只能适用于非静态的const成员变量,如果遇到静态的const成员变量,就不能放在初始化列表里初始化了我们知道,static成员变量必须在类外初始化。但是一旦是static+const成员变量,那类内类外都可以初始化了。类内const
2022-06-09 18:08:14
2112
原创 C++学习之路-new/delete误区
比如,我们想要在堆空间申请4个字节,用于存放一个int型变量这时,我们为这块占用四个字节的堆空间内存,放入了一个整型变量10。到这里没有问题,我们可以理解。当我不想用这块内存的时候,我们需要使用delete回收掉很多人会认为,执行完delete ptr,指针ptr指向的堆空间被回收,然后这段堆空间内存被清空。这里要着重说明一下回收堆空间内存的含义:那四个字节,我在执行完delete ptr后不使用了,但是可以被别人继续使用。new申请内存,表示的是,操作系统分配一段内存,供我现在使用。当我再次new申请
2022-06-08 20:35:06
348
2
原创 C++学习之路-static静态成员的使用
被static关键字修饰的成员变量。即使定义在类内,静态成员变量存储在全局区,相当于全局变量,整个程序的运行过程中只有一份内存。static成员变量的访问方式对象访问指向对象的指针访问用类直接访问时提示:非静态成员引用必须与特定的对象相对指向对象的指针访问用类直接访问时我们可以看到,静态成员变量的访问方式,比非静态成员变量多了一个类访问。我们在类中定义了静态成员变量。必须要在类外对该静态成员变量初始化,否则会报错。(错误 LNK2001 无法解析的外部符号
2022-06-08 17:49:36
642
1
原创 C++学习之路-菱形继承与虚继承
继承的形状类似于菱形,比如爷爷类有一个,父类有2个 子类有一个。如下图所示:即 Undergraduate 继承于Student,Worker。Student,Worker又同时继承于Person。菱形继承的问题我们知道Student 继承于Person,那么就相当于把Person里所有的东西都拿到Student里。Person的成员变量也会存于Student里同理,Worker类也是如此,会将Person类的成员变量存于Worker类。由于,Undergraduate 类多继承于Student类
2022-06-03 22:17:07
450
原创 C++学习之路-多继承
多继承,顾名思义就是继承多个父类。以往派生类只有一个基类,叫作单继承。派生类有两个或者两个以上的基类,就叫作多继承。多继承的语法也很简单,将多个基类用逗号隔开。例如已声明了类A、类B和类C,那么可以这样来声明派生类D:可以看到一个细节,可以分别用不同的方式继承基类,比如public, private, protected。但我们学过继承(可以看之前的博文),继承方式尽量只选public。派生类初始化基类中的private成员变量,都需要借助初始化列表的初始化方式,并且调用基类中的构造函数,间接的去初始
2022-06-01 21:41:13
1148
原创 C++学习之路-多态
面向对象三大板块之一:多态一、父类指针指向子类对象二、什么是多态三、多态的要素四、多态的本质(虚函数的本质)多张虚表的情况虚表的一些注意事项虚表的意义五、虚析构函数六、多重继承下的虚函数问题七、纯虚函数抽象类(Abstract class)八、多态总结一、父类指针指向子类对象学习多态之前,我们先学一个关键的知识点:父类指针指向子类对象。class Person{public: int m_age; Person() { cout << "Person::Person()"
2022-05-22 17:14:25
1167
8
原创 C++学习之路-构造函数的初始化列表
初始化列表何为初始化列表初始化列表的本质初始化列表的优势初始化列表中列表顺序问题初始化列表与默认参数的配合使用初始化列表的注意之处构造函数的声明和实现分离时,初始化列表需写在实现里子类调用父类的构造函数初始化列表总结何为初始化列表定义:一种便捷的初始化类内成员变量的方式。初始化成员变量通常在构造函数里执行,如下例所示。成员变量的初始化可以通过调用有参的构造函数进行传参初始化,也可以通过调用无参的构造函数在函数体内部直接初始化(可以看我之前的博文)。下例展示了调用有参的构造函数始化成员变量的方式。
2022-05-20 11:40:48
10376
10
原创 A6000显卡配置Scene-Graph-Benchmark.pytorch(KaihuaTang)过程
服务器上配置Scene-Graph-Benchmark.pytorch-KaihuaTang工程记录服务器cuda版本创建虚拟环境在虚拟环境下安装pkgs安装maskrcnn_benchmark配置可能会踩得坑GitHub地址:https://github.com/KaihuaTang/Scene-Graph-Benchmark.pytorch服务器cuda版本命令行输入nvcc -V即可查看,我这里是11.1nvcc: NVIDIA (R) Cuda compiler driverCopyrig
2022-02-10 16:45:40
2306
7
原创 C++学习之路—面向对象—继承
C++类的继承、继承规则、多重继承什么叫类的继承特性C++中类的继承特性指的是子类继承父类的成员的一种特性。一旦子类合理的继承了某个父类,就可以直接使用其内部的成员,避免重新添加成员,可减少代码量,增加程序的可读性。继承的写法如下:Parent类是父类,Children是子类。class Parent{};class Children : public Parent{};为什么要有C++的继承特性比如stud
2022-02-01 23:16:42
571
原创 C++学习之路—命名空间namespace
C++中的命名空间namespace定义到底啥叫命名空间呢?C++中的命名空间到底有啥用呢?放在命名空间里的全局变量依然是全局变量所有的C++代码都被一个默认的命名空间包围着总结定义C++中的命名空间规定了变量、函数、类的作用域。在命名空间下的所有代码都属于该命名空间,都要受该命名空间的控制。namespace 名称{ 变量; 函数; 类; ......}到底啥叫命名空间呢?也许你经常会看到C++代码中总是有这样一句(或者你经常会写上这么一句代码,但自己不太懂啥意思):using n
2022-01-24 20:24:47
683
原创 C++学习之路—面向对象—析构函数
C++面向对象-析构函数的用法定义析构函数最主要的作用通过malloc分配的对象,在free释放时,不会调用析构函数通过new分配的对象,在delete释放时,会调用析构函数malloc和new的差异总结定义析构函数也叫析构器,在对象销毁时自动调用,一般用于完成对象的清理工作。无返回值,无参,不可以重载,有且只有一个析构函数,不像构造函数可以重载。下方程序中,~Person()函数就是Person类的析构函数,与类重名,只不过前面有一个" ~ "符号class Person{public:
2022-01-24 12:44:58
653
原创 C++学习之路—面向对象—构造函数
C++面向对象之构造函数定义构造函数的用途使用构造函数有几点需要注意定义构造函数也叫构造器,在对象创建的时候自动调用,一般用于完成对象的初始化工作下方示例中Person()就是类的构造函数class Person{public: Person();//创建类时自动创建的构造函数,也可以手动添加,这个为构造函数的声明 ~Person();//虚构函数,后续文章会记录 int m_member;private:};Person::Person()//构造函数的实现-无参数构造
2022-01-21 21:14:10
1261
1
原创 C++学习之路—内存空间的布局
C++内存空间的布局简介栈空间代码区全局区堆空间栈空间、全局区都能存放东西,那堆空间存在的价值是什么????申请\释放堆空间1、malooc\free方法2、new\delete方法3、申请\释放需要注意的地方如果把堆空间的申请放在函数里,会随着函数的调用自动回收吗?在函数内部进行堆空间的申请所涉及的内存区域问题堆空间初始化方法1、malloc堆空间初始化方法顺便唠叨一下memset函数的作用2、new堆空间初始化方法类实例出来得对象的内存可以存在3种地方简介C++工程下的内存大致分为四个部分:栈空间、
2022-01-15 22:11:15
689
2
原创 C++学习之路—面向对象—封装
C++面向对象之封装定义封装的目的正好唠叨两句C++与C的区别public、private、protected的区别如何实现自己对private成员用途的一些理解定义在C++工程中,往往会有很多类的存在,为了避免类之间的相互影响。应该让类仅仅public一些必须让外界访问的成员,而隐藏private一些不想要公开的成员内容。这种信息的隐藏,就叫做C++类的封装。封装的目的封装的目的是为了保护私有成员变量正好唠叨两句C++与C的区别C++对C的最根本的改变就是把函数放进了结构之中,也就是我们
2022-01-15 11:24:01
461
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人