自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++类与对象(const修饰的成员函数以及取地址操作符重载)

目录1const修饰的成员函数2.取地址及const取地址操作符重载本篇讲述以上内容const修饰的成员函数首先,我们看一下下面这个类class A{public: A(int a = 1,double b = 0.1) { _a = a; _b = b; } void print() { cout<<"print()"<<end; cout<<_a<<" "<<_b<<endl; } vo

2020-05-25 14:35:21 211

原创 C++类与对象(拷贝构造函数以及运算符重载)

目录1.拷贝构造函数2.赋值运算符重载函数本篇讲述以上两种默认函数拷贝构造函数我们可以创建一个对象,那么能否再创建一个和这个对象一模一样的的新的对象呢?这就引入了拷贝构造函数拷贝构造函数与之前讲的构造函数一样,函数名为类名,当用已存在的类类型的对象创建新的对象时,编译器会自动调用拷贝构造函数。class A1{public: A1(int a = 1,double b = 0.1) { _a = a; _b = b; }private: int _a; double _

2020-05-23 17:36:42 387

原创 C++类与对象(构造函数以及析构函数)

目录类的六个默认成员函数1.构造函数2.析构函数本篇讲述上述两种默认成员函数。当我们创建一个空类时,里面真的什么都没有吗?不是的,任何一个类,在我们不写的情况下,都会自动生成下面6个默认成员函数1.构造函数:主要完成类成员初始化2.析构函数:主要完成清理资源工作3.拷贝构造函数:用已经存在的一个对象,初始化创建另一个同类的对象4.赋值重载函数:把一个对象赋值给另一个对象5.取地址重载:取普通对象地址6.取地址重载:取const对象地址构造函数我们看下面这个类class A1{

2020-05-23 16:14:49 382

原创 C++类与对象(类对象大小的计算以及this指针介绍)

目录1.类的对象大小的计算2.类成员函数的this指针本篇讲述以上类容类的对象大小计算在C语言中,结构体中的成员变量,满足内存对齐原则,具体内存对齐原则,在我之前讲的C语言结构体中有详细说明,这里就不多说了内存对齐原则那么,C++中的类,也满足内存对齐原则,比如:class person{ int _a; char _b; double _c;};int main(){ person _A; cout<<sizeof(_A)<<endl;}运行结

2020-05-23 14:58:51 673

原创 C++类于对象(类的引入,定义以及作用域)

目录1.面向对象和面向过程的初步认识2.类的引入3.类的定义4.类的访问限定符及封装5.类的作用域本章将讲述以上五个内容面向对象和面向过程的初步认识在C语言中,它主要是面向过程,即C语言主要关注的是过程,给你一个问题,你通过计算以及调用若干函数,一步步分析出求解问题的步骤,通过函数调用解决问题。注重的是过程而C++中,它是基于面向对象的,重点关注的是对象,比如,将一件事情拆分成不同的小事情,这一个个小事情便是对象,通过对象间的交互完成这件事。此外,什么是对象?说白了,对象就是变量的意思,大

2020-05-22 18:35:29 629

原创 C++内敛函数,auto关键字及范围for

内敛函数函数想必大家熟悉的不能再熟悉了,那我们先来看看这个函数#include<iostream>using namespace std;int add(int a,int b){ return a + b;}int main(){ int num1 = 10; int num2 = 20; int answer = add(num1,num2); cout<<answer<<endl; return 0;}这个函数非常简单,实现两个数的

2020-05-18 15:38:46 494

原创 C++中的引用介绍以及使用与指针对比详细解释

引用在C++学习中,会有一个新的名词——引用,那么什么是引用呢?举个例子,大家都有自己的大名,也有自己的小名。其他人叫你的大名,你知道是在叫你,叫你的小名,你依然知道是在叫你。引用也是如此,它是变量的一个别名。编译器不会给引用变量开辟新的内存空间,它和它所引用的变量共用一块内存空间。再举个通俗的例子,水浒传中,李逵在家被叫铁牛,江湖上人称“黑旋风”,在这里,如果把李逵比做一个变量(引用实体),那么铁牛,黑旋风便是它的引用变量。引用的格式:类型& 引用变量名 = 引用实体。比如int a = 1

2020-05-18 14:39:51 206

原创 C++缺省参数和函数重载的介绍以及使用

缺省参数缺省参数感念缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参比如#include<iostream>using namespace std;void out(int a = 2)//定义函数时指定参数a的默认值为2{ cout<<a<<endl;}int main(){ out();//调用函数时未传如参数,则输入默认值2 out(10);//传参,则使用传入的参数,输

2020-05-17 16:09:49 324

原创 C++入门C++命名空间以及C++的输入输出

什么是C ++通过学习我们知道C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度 的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语 言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C+

2020-05-17 15:18:36 291

原创 快速排序优化——三数取中法

快速排序优化前面的三篇文章中,为大家介绍了快速排序的三种划分方法。那么,这里我们想一想,快速排序是否也会有效率低的情况呢?答案是肯定的,快速排序对于数据是敏感的,如果这个数列是非常无序,杂乱无章的,那么快速排序的效率是非常高的,可是如果数列有序,往往快速排序的时间复杂度便由O(nlog2^n)退化到O(n ^2),即相当于冒泡排序。所以,我们需要优化快速排序,这里用到的便是三数取中三数取中即知道这组无序数列的首和尾后,我们便可以求出这个无需数列的中间位置的数,我们只需要在首,中,尾这三个数据中,选择一

2020-05-15 09:01:37 6473

原创 快速排序(前后指针法)

之前的两篇中,为大家介绍了霍尔划分和挖坑法划分,这一篇,我们来看看第三种划分方法——前后指针法。前后指针法顾名思义,需要两个指针,一个在前一个在后,分别用cur表示前指针,prev表示后指针(这里的指针的意思是待排序数列的下标),依旧是这个图,初始时,我们规定cur在prev的后一个位置,这里我们还是选择第一个数为基准值,如下图箭头指向的为基准值,prev指向这个数列开始的第一个,cur指向prev的后一个位置,此时我们便将它初始化完成。那么现在需要怎么操作呢?我们规定,prev每次都需要指向从左

2020-05-14 16:10:13 2740 1

原创 快速排序(挖坑法)

上一篇的内容中,已经介绍过快速排序中的一种霍尔划分的算法,这篇我们来看看第二种快速排序的划分方法——挖坑法挖坑法划分例如还是上一篇文章中的无序数列,我们依旧是选择一个基准值,仍然通过begin和end指针来操作首先,我们仍然是从end开始向前找一个小于28的数,找到后直接放在begin的位置,注意这里不是交换,如下图箭头所指向的是我们选取的基准值,这时可以理解为它不在这个数列当中,而end对应的位置就出现了一个坑,这时,begin开始向后寻找,找到第一个大于基准值的数后放到end的位置,如下图

2020-05-14 14:42:56 1713

原创 快速排序(霍尔划分)

快速排序大家看到快速排序,想必都会觉得此类排序方法很快吧。的确,该种算法排序效率比较高。那么,什么是快速排序呢?在快速排序中,选择一个基准值,后,遍历这个数列,通过一定的划分算法,将基准值放到合适的位置,若是升序排序,则基准值的前面全部是小于基准值的数,其后全是大于基准值的数,即通过一趟快速排序后,基准值找到了自己合适的位置,继续递归进行快速排序,直到整个数列变成有序。快速排序其一的划分为霍尔划分,接下来我们就看看霍尔划分是如何实现的吧霍尔划分选定一个基准值,规定begin指向最左边的值,end指

2020-05-14 09:46:58 2710

原创 计数排序

计数排序该排序方法较为简单,即新构建一个数组,以待排序的数列的每一个数值未新构建数组的下标,进行++,当遍历完整个待排序数组后,新的数组已经将信息存入,接下来就是遍历整个新的数组,如果遇到数组元素不为0的便输出下标,并且–该元素值,直到该元素值为0,继续遍历后面的数,直到真个数组结束。值得一提的是,该排序方法,要求所有排序的数都为正数,除此外该排序适用于待排序数值较小的数列,若太大,则开辟空间也大,遍历时间增长,效率也就随之降低,所以大家再编写排序算法的时候,一定选择一种对待排序数据较友好的一种算法哦。

2020-05-13 12:37:27 136

原创 冒泡排序

冒泡排序上一次文章说到了选择排序算法,这篇文章我们来看看冒泡排序首先,要知道,冒泡排序是一种性能相对较低的算法。它的思想为,每次将最大或者最小值(选择最大值则每次都要选择最大值,反过来最小值也是如此),调整到合适的位置,逐一进行比较,最终会形成一个有序的序列。冒泡排序的思想比较简单。对于冒泡排序来说时间复杂度为O(n^2),性能相对较低,对数据比较敏感。void bubbleselect(int* array,int size){ for(int i = 0;i<size;i++) {

2020-05-13 11:37:32 770

原创 选择排序

选择排序大家在学习排序的时候,想必都学过选择排序和冒泡排序,这里我们先讲解一下选择排序选择排序,顾名思义,通过每次选择一个最值来对无序的数列进行排序。我们可以每次遍历的时候,选出一个最小值或者最大值的下标,与它要放的位置下标进行交换,显然,选择排序是需要双重循环,并且这种算法是稳定的,对于他的时间复杂度,因为涉及到双重循环,故他的时间复杂度为O(n^2)。涉及到交换因此我们先写一个交换函数void swap(int* array,int left,int right){ int tmp = a

2020-05-13 11:12:45 173

原创 直接插入排序及希尔排序

直接插入排序对于直接插入排序,是指一组无需数列,默认第一个数是有序的,从其余无序的数列中依次选择数值,插入到有序的数列中去,直到整个数列全部有序。比如下图算法思想:默认1是有序的,则对于后面3,2,5,4,7,6是无序的。我们开始遍历,发现2应该再3的前面,所以将2插入到3前面此时箭头指向已排好序的最后一个数的为止,继续遍历。发现5大于3,继续遍历,扫描到4,则4应该插入到3和5之间,所以插入后,箭头指向5,继续遍历,发现6应该再5和7之间,则将6插入到5和7之间。此时整个数列变得有序,则排序过程结

2020-05-13 10:26:22 271

原创 数据结构——堆以及堆排序

堆上一篇介绍了二叉树,这一片我们来看堆。首先什么是堆?其实堆也是一种二叉树,只不过是一种特殊的二叉树。堆分为大根堆和小根堆。大根堆就是根节点的值是最大的,且他的两个孩子节点也是一个大根堆,以此类推。比如下图根节点是100,比他的两个孩子90和85大,而他的两个孩子作为根节点72同样比他们的孩子值大,这样的结构我们称之为大根堆,并且这个堆的根节点的值是这个堆里面所有值的最大值,正是这一特点,为...

2020-05-08 14:24:12 1616

原创 数据结构——二叉树

二叉树数据结构中有一种数据类型叫做树,其中用的较为广泛的莫过于二叉树啦。今天我们来看看二叉树这种独特的数据结构首先二叉树故名思意每个结点最多有两个孩子。二叉树中又分为满二叉树和完全二叉树。比如下图这种树为满二叉树而完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。如上图是一个完全...

2020-05-02 17:42:40 163

空空如也

空空如也

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

TA关注的人

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