C++
onlyongwang
此博客只用来记录学习笔记,不作他用!
展开
-
【C++】STL容器总结
https://blog.csdn.net/hudfang/article/details/52934130三大类容器:1. 序列式容器:vector、deque、listvector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分...转载 2018-09-13 14:18:14 · 257 阅读 · 0 评论 -
【C++】抽象基类和纯虚函数
抽象基类和纯虚函数不能被实例化的基类被称为抽象基类,这样的基类只有一个用途,那就是用它来派生出其他类,可使用纯虚函数的声明来创建纯虚函数。纯虚函数在虚函数表中不指向任何函数成员。值得注意的是:声明抽象基类后 1. 派生类必须声明相应的方法;2. 不能再对这个基类实例化附上一个Shape, Circle,Triangle的例子: 【C++】RTTI如果我有一个...原创 2018-08-05 20:08:19 · 1541 阅读 · 0 评论 -
【C++】深拷贝和浅拷贝
之前介绍过,在实例化对象时,如果想要拷贝一个已经存在的对象给新的对象,那么就会调用这个类的拷贝构造函数。浅拷贝:只是简单拷贝地址。深拷贝:将数据成员中的地址与地址指向的数据都拷贝过来。...原创 2018-07-31 16:40:54 · 330 阅读 · 0 评论 -
【C++】函数新特性
1. 函数的默认参数函数可以有默认参数,你在调用的时候,如果不给函数参数赋值,函数将按照默认值执行2. 重载函数函数可以重载,也就是函数名称可以一样,只是返回类型以及参数类型,数目不同。函数被调用的时候,系统会根据参数来匹配到相应的函数。3. 内联函数:申明时候加上inline,省去了函数传递的过程,在我看来与引用参数的效果类似inline只是“建议”,也就是说,编译器...原创 2018-07-31 15:09:28 · 165 阅读 · 0 评论 -
【C++】const
const 用法:1. const修饰普通变量,在普通变量定义的前面加上const,变量就不能被重新赋值2. const修饰指针的写法有点复杂:const int *p 与 int const *p完全等价,他们修饰的是*p,也就是*p不能被重新赋值,也就是被指向的对象int * const p则不一样,它修饰的是p,也就是说p这个指针内存的地址不能动了,但是这个地址指向的变量...原创 2018-07-31 14:51:24 · 282 阅读 · 0 评论 -
【C++】栈中实例化对象与堆中实例化对象
一. 实例化对象写法的区别栈中实例化对象:堆中实例化对象:最大区别就在于,从栈中申请内存,在使用完后无需释放,但是从堆中申请内存,使用完以后必须释放!注意:从堆中申请内存,是有可能失败的,所以要加上对于申请内存是否成功的判断!二. 访问对象成员的区别...原创 2018-07-31 14:11:53 · 4703 阅读 · 1 评论 -
【C++】内存分区
栈区:int x=0; int*p =NULL;最大特点是,由系统分配内存,无需手动释放内存空间 堆区:int *p= new int [20],由new申请的内存是从堆区申请的,需要delete操作回收: delete [] p; delete时候如果不加[],那么只会销毁数组第一元素! 全局区:存储全局变量以及静态变量(这也是局部静态变量的值不会随函数的结束而被...原创 2018-07-30 20:38:43 · 335 阅读 · 0 评论 -
【C++】STL 容器 list
list容器与vector/deque比较类似,都是用来存放数组的。最大的区别在于存放规则:对于vector/deque,它存放数组会找一段连续的内存空间来存放,这也就是说,vector中的元素并不能被随意插入,只能在头部或尾部插入;list存放数组,它的内存空间并不是连续的,而是任意的,那么它就可以被随意插入元素,很轻松。这样的存放规则就注定他们的读取规则也不一样:vector/deque每个元...原创 2018-07-07 20:19:18 · 134 阅读 · 0 评论 -
【数据结构】队列
环形队列的实现:原创 2018-07-24 23:33:41 · 97 阅读 · 0 评论 -
【算法】二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。最开始有一个崎岖的想法:那就是根据向右递增,向下递增这个法则,从最后一个数开始往前数,以及往上数,来确定目标数的范围,再去找这个数,结果就是很费劲:简直是费了老大的劲,其实没那么麻烦:想想,只要先把指针放在右上角这个数,来跟目...原创 2018-07-06 16:23:56 · 264 阅读 · 0 评论 -
【算法】排序
记录下几种排序方式时间复杂度为O(n²)的有:冒泡:从第一个遍历,每次循环都把最大的数放在最后面选择:从第一个数开始遍历,每次循环都把从后面找到的最小的数放在最前面插入:从第一个数开始遍历,每次循环都把这个数插到它前面对应的顺序位置下面这几个时间复杂度为O(n*log(n))归并:https://www.cnblogs.com/zyb428/p/5673738.html...原创 2018-07-12 23:18:49 · 137 阅读 · 0 评论 -
【C++】RTTI
如果我有一个父类 Flyable,还有两个子类 Bird和Plane,有一个函数 doSomething,它的形参是一个Flyable指针,如果我想在程序中判断,这个指针指向的到底是Bird还是Plane,那我可以用typeid来判断,判断过后还可以用dynamic_cast,把这个指针转化为相应类型。...原创 2018-08-09 23:13:27 · 184 阅读 · 0 评论 -
【C++】异常处理
对可以预见的错误进行合理安排关键字:try... catch...throw原创 2018-08-09 23:33:06 · 139 阅读 · 0 评论 -
【C++】Mutex
学习Mutex首先需要了解互斥锁的概念,详情见之前的文章。Mutex类就是C++中实现互斥锁的类,互斥锁有可重入和不可重入之分:mutex是不可重入的互斥锁,recursive_mutex是可重入的互斥锁;加上上锁时间的限定后,就有了另外两个互斥锁:mutex_timed, recursive_timed_mutex,分别是可重入/不可重入的互斥锁。 互斥锁的操作有:上锁 ...原创 2018-09-06 22:11:37 · 2194 阅读 · 0 评论 -
【C++】纯虚函数、虚函数、普通函数的继承
这三种函数的使用区别如下:纯虚函数:只提供一个接口,具体实现方法需要派生类自己去重载。由于纯虚函数的出现,基类变成了一个抽象类,只能被继承,而不能被实例化;纯虚函数的话,必须在派生类中重载。所以纯虚函数只提供一个方法的接口,实现方式需要派生类自己去写。虚函数:提供接口,并提供默认的实现方法;派生类也可以根据需要自己去重载。这就是说,虚函数提供默认的实现方法,如果派生类自己不重载它的...原创 2018-09-06 09:53:34 · 8855 阅读 · 1 评论 -
【C++】 线程的互斥与同步
同一个进程的线程共享进程内的绝大部分资源,当一段访问这些共享资源的代码块,有可能被多个线程执行时,那么这段代码块就称为临界区。当有多个线程并发的在临界区执行时,程序的执行结果会出现不确定性,这种情况称之为竞态条件。多线程编程中,避免出现竞态条件的一项重要解决方案就是,保证多个线程在临界区是互斥的。所谓的互斥,就是指不能同时有多于一个线程进入临界区。 保证临界区互斥的重要技术,就是互斥锁。 互...转载 2018-09-02 22:09:48 · 1455 阅读 · 0 评论 -
【C++】 线程的创建和结束
线程的创建用的函数是pthread_create,用到的库是pthread。成功会返回0,失败返回错误码。thread是输出,输出的是线程句柄,其实pthread_t代表的就是创建的线程的ID。统一进程内的线程,除了栈区是特有的,其他区域都是共享的。 线程的终止分为主动终止和被动终止。...原创 2018-09-02 21:15:31 · 2217 阅读 · 0 评论 -
【C++】指针与引用的区别
先说原理:指针是一个内存中的实体,它的存储对象是它指向的对象的地址;引用并不是一个实体,它只是另一个变量的一个别名。根据原理的不同,他们有不同的特性:1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。(注:不能有引用的值不能为NULL)3、有多...原创 2018-08-21 09:36:11 · 302 阅读 · 0 评论 -
【C++】makefile
makefile用途:makefile文件帮助我们记录了整个项目工程的所有需要编译的文件列表,这样我们在编译时仅需要输入简单的make命令就能编译出我们期望的结果 makefile文件反映了整个项目中各个模块的依赖关系,这样我们改动了某些源文件后,仅需简单的输入make命令,make工具就会根据makefile文件里描述的依赖关系帮助我们分析哪些模块需要重新编译,并执行相应的操作。make...原创 2018-08-27 23:22:24 · 360 阅读 · 0 评论 -
【C++】OpenCV实现对运动目标的追踪
用到的三个知识点:1. 反向投影简单来说,将图像转化一下,每个位置的像素点的值改为,所有像素值位于该点像素值对应的区间内的像素点的个数!灰度图像...原创 2018-08-22 23:02:21 · 3927 阅读 · 0 评论 -
【C++】面向过程中的static
全局静态变量:相比于全局变量,全局静态变量只在定义它的源文件中才可以调用!在其他源文件(.cpp)调用会报错。在其他源文件中,要是想调用这个全局静态变量,只能是在定义该全局静态变量的源文件中,创建一个返回值为该全局静态变量的函数,完了在其他源文件中调用这个函数。 局部静态变量:1. 相比于局部变量,局部静态变量只能在定义它的函数内部被调用!在定义它的函数之外或者其他源文件都不能...原创 2018-08-13 21:27:09 · 143 阅读 · 0 评论 -
【C++】智能指针
详情参考:https://www.jianshu.com/p/e7d5443d6614转载 2018-08-14 22:53:20 · 115 阅读 · 0 评论 -
【C++】面向对象中的static
静态数据成员静态数据成员静态数据成员不依赖于对象,而取决于类,也就是说:静态数据成员在类创建时候就有了,而普通数据成员在类实例化之后才创建,并且,实例化多少个类,就会产生多少个普通数据成员,但静态数据成员永远只有一个(值是可能变的,取决于你怎么用它)。另外静态数据成员的初始化要在类外进行。 静态成员函数是用来调用静态成员函数的,不能调用非静态成员或非静态成员函数!!...原创 2018-08-10 19:46:04 · 210 阅读 · 0 评论 -
【C++】友元函数/友元类
友元函数:全局友元函数:类中的函数申明为全局友元函数后,在main中可以访问这个函数;成员友元函数:类中的函数申明为某个友元的友元函数后,在这个类中可以访问这个函数。 友元类:在类中可以申请,某个类是自己的友元,然后这个类就可以访问自己的成员函数与对象成员了...原创 2018-08-10 19:28:22 · 207 阅读 · 0 评论 -
直通BAT面试算法课程
需要购买课程的点击:专属优惠购课链接:http://www.nowcoder.com/courses/1?coupon=Ap8zj29原价99的课程可以减10元原创 2018-07-12 19:03:47 · 357 阅读 · 0 评论 -
【算法】计数排序和基数排序
之前介绍的排序都是根据比较大小的原理来的,这两种排序则不是根据比较大小来的。计数:桶原理,把数依次放到对应的桶里面,再从桶里捡出来。基数:依次根据个位,十位...把相应的数字扔进桶里,再拿出来 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1...原创 2018-07-18 22:32:57 · 144 阅读 · 0 评论 -
【C++】公有/私有/保护特性
将数据限定为不同性质的访问时候,数据的访问权限不同:公有访问限定:在类的内外部都可以被调用私有/保护访问限定:只能在类的内部被调用,在类外部不能被调用 继承的话也有这三种方式:公有继承:子类会把父类的公有成员和保护成员都继承下来,并且成员属性还是也是继承下来的,注意私有的是继承不来的(确切说是继承在了不可见位置)保护继承:私有继承: 是一种包含关系, 也就是 h...原创 2018-06-07 23:05:36 · 411 阅读 · 0 评论 -
【C++】继承
几点基础回顾:1. 定义继承类的方法2. 使用protected属性在基类中,这样继承类可以使用这个参数,而且在外部这个属性不会被修改3. 基类初始化:向基类传递参数这个里面在基类和派生类中都要使用构造函数来初始化类。一个基本的继承例子:...原创 2018-06-07 21:17:16 · 159 阅读 · 0 评论 -
【C++】运算符
这里记录一些之前不熟悉的:1. 关系运算符的返回值为bool,也就是0或1;可以用在bool型数据的赋值里面,也可以当做if / while 等判断判断语句的判断条件;具体包括: == != > < <= >=2. 按位运算符,这个东西包括 ~ & | ...原创 2018-05-29 21:01:50 · 322 阅读 · 0 评论 -
【C++】运算符
运算符是什么:在C++中,运算符就是被命名为“++ -- & 等”的函数,那为什么不用函数用运算符呢?简单回答,使用运算符代替函数会让代码更好操作,更直观。以下面的例子来说明下:这个例子中,定义了两个运算符分别可以使year这个类增加或减少一天。从代码例很明显可以看出,代码会特别直观,而且操作起来比函数省事,不用写什么 .() 之类的东西。上面那个写法要注意的,一是运算符的定义方式...原创 2018-06-11 21:19:58 · 529 阅读 · 0 评论 -
【C++】数组
1. 动态数组:可以定义数组时候,不指名数组的元素个数,在具体用的时候,再指明2. 想知道数组元素个数的话,直接使用 sizeof 即可!3. C++中可以直接定义字符串变量!!!相对于c中,我么只能以字符数组的形式去定义字符串,C++中,可以直接定义字符串!!这是非常方便且安全的,以后切记不要再用字符数组了,直接用字符串,具体写法:...原创 2018-05-28 23:20:57 · 423 阅读 · 0 评论 -
【C++】变量与常量
1. 关于全局变量全局变量一旦定义好,则可以在整个程序任何地方引用,包括main函数与自己定义的其他函数;但切记,全局变量不能随便用,因为他哪里都能用,很可能造成这个变量的值各种来回变。2. 关于数据类型的长度:可以用sizeof这个函数来查看,具体方法:任何类型的数据,都可以用这个函数进行查看。运行结果:这里的2和4都指的是字节数,也就是说int占四个字节,也就是32个bit,那他的长度就是 0...原创 2018-05-28 20:56:40 · 960 阅读 · 0 评论 -
【C++】类和对象--constructor和destructor
Constructor:人称构造函数,用来初始化class,在class内部或外部都可以定义,在实例化class的时候会被调用。Constructor的写法一般会有:1. 默认的构造函数,也就是实例化的时候不带任何变量就能调用的构造函数;(这种情况有可能是构造函数就没给默认值,也可能是给了固定的默认值)2. 重载构造函数,在有或者没有默认构造函数的基础上,带有相关变量,用来初始化cla...原创 2018-06-03 17:56:30 · 3449 阅读 · 0 评论 -
【C++】类和对象--public和private
先通过建立 Human这个类来感受一下:这个例子就对类的建立和使用做了个大概的介绍:首先是类的建立,需要声明它的属性,以及属性的性质,之后需要建立这个类内部的函数;在使用这个类的时候,要实例化这个类,并且对类的属性初始化。注意类的实例化有两种方法:堆中申请内存以及栈中申请内存,后面的文章有介绍!关于为什么会有public和private的设置,下面这个例子就是最后的解释:...原创 2018-06-03 12:33:17 · 5523 阅读 · 3 评论 -
【C++】引用
之前在函数返回值那章写过关于引用的问题,这里重申一下:引用是给一个变量创建一个新的名字,而变量的值和存放的位置都是不变的。所以引用必须得被赋初值。引用的作用:一. 使用引用操作变量可以给任何变量建立引用,包括普通变量,结构体,指针,下面是给指针建立引用并操作它的例子:下面是定义引用并且初始化的方式:上面那个程序中,其实是可以通过修改Ref1 或者Ref2的值来修改o...原创 2018-06-02 23:22:52 · 256 阅读 · 0 评论 -
【C++】指针
首先,要记住,使用指针输出被指对象时候,需要写明要输出的对象格式,比如整形的话,是输出十六进制、十进制、八进制等,例如:这里p1指向的是整形,如果我想输出该整形的十进制形式,就得加上 这个“dec”,否则是不能输出十进制的!动态内存的分配:为了不浪费内存空间,可以分配动态内存,把这个动态内存的首地址放在一个指针里面,用完以后释放这个动态内存就好:可以看到动态内存的定义方法,以及释放方法:记住:1....原创 2018-06-02 20:41:36 · 320 阅读 · 0 评论 -
【C++】函数返回值
如果我想用void类型的函数,计算给定半径的圆面积,该怎么计算呢,像这样可以吗:答案是不可以的,这样写的话,函数不会把计算好的结果返回到实参,也就是说,函数传递了实参的值到形参的位置,并且在函数那块的地址对这两数进行了处理,却没有把结果返回实参的位置,实参还会保持原先的值不变。那么我想让实参的值也改变该怎么做呢?这时候需要按引用传递函数,也就是说,在编译的时候会让处理器不要把实参的值传递给形参,而...原创 2018-06-02 18:09:04 · 8631 阅读 · 0 评论 -
【C++】菲波那切数列
一个使用C++写菲波那切数列的方法:精髓在于使用 continueInstruction这一变量判断是否继续输出,并使用do while语句来做这个事情原创 2018-05-31 20:40:31 · 1063 阅读 · 0 评论 -
【C++】多态 - 虚函数/虚析构函数以及虚函数表
什么是多态:指不同对象收到相同消息时或相同对象收到不同消息时产生不同的动作。这里先说下为什么会用到虚函数:以下面的程序为例: 这个程序中,Carp是Fish的继承类,而Carp中覆盖了Swim这个方法,在MakeFishSwim这个函数中,要使用Fish类的形参,而你将yourFish这个Carp类的实参传递给了这个函数,让他执行Swim这个函数,这会发生什么,上面的程序运...原创 2018-06-09 21:30:42 · 1250 阅读 · 0 评论 -
【C++】 容器 vector初始化二维数组
使用vector初始化二维数组,并且获得二维索引的方法:原创 2018-07-06 09:53:44 · 6994 阅读 · 0 评论