自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

请叫我少爷的博客

相信微末的力量

  • 博客(28)
  • 收藏
  • 关注

原创 c++11新特性(7)之push_back与emplace_back之间的区别

c++11新加入了emplace_back():如果要将一个临时变量push到容器的末尾,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。请看代码:#include <iostream>#include <cstring>#include <ve...

2019-08-31 12:54:46 9848 5

原创 初识c++(30)之由右值引出来的一系列概念(左值,右值,移动语义,move,完美接收,forward)

C++11为了解决这两个问题对右值的概念进行可扩充临时对象非必要的拷贝操作应用于普通函数 应用于类的移动构造函数(移动语义)模板函数中如何按照参数的实际类型进行转发什么是右值在c++11之前就有左值、和右值的概念。可以这样理解,左值是有名字的值,而右值是没有名字的值(粗略的讲就是临时变量),由于右值没有名字,无法进行引用,它将会在它出现的语句运行结束后马上死亡。这种机制导致了...

2019-08-31 12:04:55 272

原创 初识c++(29)之拷贝构造函数的形参为什么必须是const引用

拷贝构造函数的形参必须是引用,这是编译器强制规定的,否则不能编译通过。为什么?调用拷贝构造函数的三种情况用已知的对象拷贝生成新对象 以值传递的方式传入函数 函数的返回值是以值传递的方式形参为什么一定要传引用假如我们的拷贝构造函数是这样的A(Aa);,这是一个值传递,那我们会调用一个拷贝构造函数,而调用的拷贝构造函数还是值传递,那么我们就需要继续调用拷贝构造函数,这样的的话就...

2019-08-29 16:30:58 1545

原创 初识c++(31)之返回值优化

返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术。它最大的好处是在于: 可以省略函数返回过程中复制构造函数的多余调用,解决 “C++ 中长久以来为人们所诟病的临时对象的效率问题”。先来看一下测试代码:#include<iostream>using namespace std; class A{public:...

2019-08-24 17:44:55 283 1

原创 初识c++(28)之多继承、虚继承

多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示:类 A...

2019-08-22 16:44:34 217 1

原创 剑指offer笔记(1)定义一个空类型,里面没有任何成员变量和成员函数。对该类型求sizeof 结果?

这是剑指offer第23页的一个问题:定义一个空类型,里面没有任何成员变量和成员函数。对该类型求sizeof 结果?结果为1 。为什么不是0?空类型实例中不包含任何信息,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例(你想想,这个实例的指针至少要指向一块内存空间吧)。至于占多少空间,由编译器决定。Visual Studio中每个空类型...

2019-08-22 15:48:30 424

原创 23种设计模式(0)之面向对象设计的八大原则

依赖倒置原则(DIP)心思想:客户端代码(调用的类)尽量依赖(使用)抽象的组件。抽象的是稳定的。实现是多变的。依赖倒置原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不...

2019-08-21 20:07:44 131

原创 c++11新特性(6)之uniform initialization(标准初始化)以及initializer_list

uniform initialization(标准初始化)在c++11之前的版本,初始化是一个没有被统一的写法,有时候用小括号,有时候用大括号,有时候还用赋值号,我之前在学习C语言的时候就深有体会,在c++11中就统一了初始化的形式——“{ }”,直接在对象名后面跟大括号,并在大括号中写入需要初始化的值,并用逗号隔开。甚至类构造函数的初始化列表也可以用“{}”大括号,比如:int val...

2019-08-20 21:06:03 864

原创 c++11新特性(5)之nullptr、NULL、0之间的区别

NULL 和 “0”之间是等价的,因为NULL只是一个宏定义。而nullptr是c++11中新出现的一个对象,这是一个空的指针对象。初始化一个空指针时,推荐使用int* p = NULL;//c++11之前的写法int* P_1 = nullptr;//c++11推荐写法...

2019-08-20 17:27:33 578

原创 c++11新特性(4)之spaces in template expressions(模板表达式中的空格)

spaces in template expressions(模板表达式中的空格)vector<list<int> >;//“> >”在最后两个箭头之间有一个空格,c++11之前的版本要求必须有这个空格vector<list<int>>;//c++11中可以省略掉这个空格,使得程序更加美观...

2019-08-20 17:07:23 390

原创 c++STL剖析(4)之容器之array

格式template < class T, size_t N > class array;描述数组是固定大小的序列容器:它们包含以严格线性顺序排列的特定数量的元素。在内部,数组不保留除其包含的元素之外的任何数据(甚至它的大小,这是一个模板参数,在编译时固定)它在存储大小方面与使用语言括号语法声明的普通数组一样高效。这个类只是为它添加了一层成员函数和全局函数,因此数组可以...

2019-08-20 09:02:37 142

原创 初识c++(27)之创建一个没有参数的类对象时,不能加括号

全世界可能只有我自己会犯这样的错误class A{ public: A(){cout << “不带参数的构造函数” << endl;} A(int i){ cout << "带参数的构造函数" << endl;}}int main(){ A a;//A a{}跟这样的写法等价//使用不带参...

2019-08-19 15:44:42 564

原创 23种设计模式c++实现(2)策略模式(Strategy Pattern)

策略模式(Strategy Pattern)它定义了算法家族,分别封装起来,让它们之间可以相互替代,此模式让算法的变化,不会影响到使用算法的客户。策略模式应该是面相过程的思维方式,到面向对象的思维方式转换的最直接的一个例子。封装出一个良好的接口给客户端使用,而底层算法的改变,不会影响到客户端。UML结构图应用场景有一系列的算法方法,但从概念上来看,这些方法都解决的都是相同的工作...

2019-08-17 11:27:44 166

原创 23种设计模式c++实现(1)之模板方法(template mathod)

模板方法(template mathod)在基类定义一个算法骨架,而将算法中的某些步骤推迟到子类中实现。也可以用钩子方法来选择算法骨架中的分支。UML结构图如上图所示:对于一些算法,我们可也将算法骨架个抽象出来,形成抽象的基类。但是对于算法中的某些步骤,我们暂时无法写出来,因为不同的使用者,对于这些步骤有不同的实现方式。因此在基类中我们用虚方法来定义这些步骤,子类继承基类,并在子类...

2019-08-16 09:34:55 180

原创 23种设计模式c++实现(0)之用UML结构图来表示类之间的关系

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。通过我在网上查阅资料,发现UML是一个应用比较广泛的建模语言,而且在Visio中也有专门的模块,但是在这里我们不做详细的追究,只是用UML来表示类与类之间的关系,从而让我们的设计模式的结构更加的直观。所以我们的目的就是能够看懂UML结构图就行。UM...

2019-08-15 14:29:55 690

原创 初识c++(26)之虚析构函数

阅读这篇博客之前需要有动多态的概念,可以配合我的上一篇博客共同食用:https://blog.csdn.net/shaochuang1/article/details/99305833虚析构函数的应用场景:当我们在使用多态的时候,需要将基类指针指向new出来的派生类对象,在使用结束后,需要delete这个指针时就会出现问题。由于这个指针是基类指针,delete这个指针也只会触发基类的析构函数...

2019-08-13 11:03:48 147

原创 初识c++(25)之c++中的多态特性(静多态、动多态)(静态绑定(早绑定)、动态绑定(晚绑定))

静态绑定(早绑定)、动态绑定(晚绑定)什么是绑定?绑定就是将函数体与函数调用之间关联起来。静态绑定就是早绑定,静态绑定是指在编译阶段,就将函数体与函数调用之间关联起来。动态绑定就是晚绑定,动态绑定是指在程序运行阶段,才将函数体与函数调用之间关联起来。在c++中能实现动态绑定的机制就是虚函数(也可以用函数指针来实现,其实虚函数的底层就是一个函数指针,但是函数指针更为常见),虚函数才会实现...

2019-08-12 17:11:53 384

原创 初识c++(24)之虚函数的简单应用以及类成员函数重载、覆盖和隐藏的区别以及控制字override、final的用法

关于虚函数的定义可以看我的上一个博客:https://blog.csdn.net/shaochuang1/article/details/99072309虚函数的简单应用虚函数存在的意义主要就是,让派生类覆盖基类中的部分成员函数,有时候基类中的成员函数都为纯虚函数,只是为了提供一个结构,而真正的定义都在派生类中。例子:#include<iostream>using ...

2019-08-10 16:05:44 164

原创 初识C++(23)之虚函数、虚指针、虚表的定义

虚函数对于类的成员函数,如果在前面加上virtual,那么这个成员函数就是虚函数,这个类就是带有虚函数的类。虚指针,虚表带没有虚函数的类,与不带虚函数的类之间有什么区别呢?带有虚函数的类比不带虚函数的类会多一个指针,这个指针就是虚指针,而虚指针指向一个表,这个表就叫做虚表。虚表里面存的内容就是虚函数的地址。例子:#include <iostream>using ...

2019-08-10 14:59:25 506

原创 初识c++(22)之main函数的形参使用

众所周知,c++程序主要是由一个一个的函数构成的,最特殊的应该就是main函数啦。以前都知道main函数有系统调用,大多时候我们写的main函数也是没有形参的,如果有形参那么我们又将如何赋给这些形参值呢?先看带形参的main函数是怎么写的:int main(int argc,char** argv)int main(int argc,char* argv[])这是我在网上找到的...

2019-08-10 09:14:32 495

原创 ROS学习笔记(3)之ros的topic发送与接收简单实例

建立packagecd ~/catkin_ws/src catkin_create_pkg first_pkg roscpp ros_py std_msgs 编辑msg文件cd first_pkgmkdir msg#创建msg文件夹,这个文件夹一定要是这个名字cd msg #进入文件夹vi test_1.msg //怎么编译这个文件,根据跟人喜好,msg文...

2019-08-09 21:11:54 10171 1

原创 数据结构与算法c++实现(5)之KMP匹配算法

应用背景:我们都用过word中的查找功能,这个查找功能就是匹配算法的应用背景。在主串中找到子串,并返回子串在主串中的位置。暴力匹配:假设我们的主串是S= “goodgoogle”,子串T=“google”。要想在主串中找到子串最简单的做法如下:代码实现:#include<iostream>using namespace std;int B...

2019-08-09 16:18:37 376

原创 ROS学习笔记(2)之创建我的第一个ros工程

创建工作区(workspace)$mkdir-p~/catkin_ws/src $cd~/catkin_ws/src $catkin_init_workspace虽然这时候工作区是空的,但是我们依然可以进行编译:$cd~/catkin_ws/ $catkin_make这时候,会在当前文件夹下生成devel,build这两个子文件夹...

2019-08-09 11:14:12 2409

原创 ROS学习笔记(1)之ros常用命令

2019-08-08 14:46:01 254

原创 初识c++(21)之数组长度是否可以为变量

对于c++中数组的长度是否可以是变量,网上众说纷纭 。现来看看c++ primer第五版上怎么说的:上面说的很清楚,不能用一个变量来初始化数组的长度。但是我在网上找到了这样一个代码:#include <iostream>using namespace std;int main(){ int a =0; cin >> a; int ar...

2019-08-07 15:46:55 2315

原创 初识c++(20)之友元函数、友元类

写在前面的话:也忘了在哪里看到的这一句话:类就像是墙,把对象给保护起来啦,但是友元就像是墙上的一道门。这样做增加了程序的灵活性,但是同时也增加了风险性,所以要谨慎使用。在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可...

2019-08-06 14:49:46 134

原创 初识c++(19)之private、protected、public以及不写时之间的区别

先说不写时的默认情况,class默认为private,struct默认为publicprivate,public,protected的访问范围:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友...

2019-08-05 21:27:09 2226

原创 ubuntu1604下QT5连接mysql出错

错误信息:QSqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers: QSQLITE解决方法:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get install qt-sdk命令装的低版本的Qt5(如5.2.x)缺...

2019-08-05 17:12:44 174

空空如也

空空如也

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

TA关注的人

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