
C++
文章平均质量分 72
snow_5288
三天不读书,智商输给猪
展开
-
智能指针
一、为什么要引入智能指针? 我们知道,C++中的动态内存需要用户自己来维护,动态开辟的空间,在出函数作用域或者程序正常退出前必须释放掉,否则会造成内存泄露,虽然有时我们已经非常谨慎了,然而当代吗比较长或比较复杂时,我们仍然可能忘记释放,正所谓防不胜防,一起看一段代码:void FunTest1(){ int *p = new int[10]; FILE* pFile =原创 2016-11-25 17:34:13 · 5121 阅读 · 0 评论 -
【排序五】非比较排序(计数排序&&基数排序)
比较排序:【排序一】插入排序(直接插入排序&&希尔排序)【排序二】选择排序(选择排序&&堆排序)【排序三】交换排序(冒泡排序&&快速排序)【排序四】归并排序一、计数排序1、基本思想 给定一组要排序的序列,找出这组序列中的最大值,然后开辟一个最大值加1大小的数组,将这个数组里面的元素全部置零,然后用这个数组统计出要排序的序列中各个元素出现的次数原创 2017-03-06 22:39:30 · 1025 阅读 · 0 评论 -
【排序三】交换排序(冒泡排序&&快速排序)
【排序一】插入排序(直接插入排序&&希尔排序)【排序二】选择排序(选择排序&&堆排序)一、冒泡排序1、基本思想 冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。为什么会叫做冒泡排序呢?这是由于它的算法思想就类似于鱼儿在河里吐泡泡的场景,例如升序排列一列数,它会两两相邻的数据进行比较,如果前者大于后者就交换,重复此番工作直到交换到最后两原创 2017-03-04 21:45:07 · 10018 阅读 · 5 评论 -
二维数组中查找数据(该数组每行从左至右递增,每列从上至下递增)
/*二维数组中查找(该数组每行从左至右递增,每列从上至下递增)*/#pragma once#include using namespace std;const int ROW = 4;const int COL = 4;bool Find(int a[ROW][COL],int key){ if (a && COL>0 && ROW>0) { int col = COL-1原创 2017-04-12 19:12:45 · 1277 阅读 · 0 评论 -
求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中
#pragma once#include <iostream>#include <cassert>#include <stack>#include <vector>using namespace std;template <typename T>struct TreeNode{ T _data; //节点的数据 TreeNode<T>* _l原创 2017-04-12 19:26:46 · 870 阅读 · 0 评论 -
大数运算(加减乘除)
大数运算的实现方法主要有以下几种: 1) 用字符串表示大数。将大数用十进制字符数组表示,然后按照“竖式计算”的思想进行计算。这种方法比较容易理解,但是计算效率比较低。 2) 将大数看成二进制流进行处理。使用各种位运算和逻辑操作来实现打算的运算。该方法设计复杂,可读性较差,而且难以调试。 3) 将大数表示成一个n进制数组。n的取值越大,数组的大小越小,这原创 2017-05-02 14:38:48 · 23680 阅读 · 3 评论 -
C语言模拟实现C++的继承与多态
一、面向过程编程与面向对象编程的区别 众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到底有什么样的区别呢?【从设计方法角度看】 面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来。 面向对象程序设计方法是将数据和对象的操作封装在一起,作为一个整体来处理。【从维护角原创 2017-04-16 21:28:27 · 4682 阅读 · 0 评论 -
栈和队列的常见面试题
1、两个队列实现一个栈 两个队列实现一个栈2、两个栈实现一个队列 【算法思想】 1>设计类 成员变量:给两个栈s1和s2来模拟实现一个队列 成员函数:入队Push()和出队Pop() 2>给两个指向栈对象s1、s2的指针input和output,分别用来入队和出队 3>按照先进先出的方式模拟入队和出队操作 Push:将input指向不空的栈,然后在input中入队 Pop:将inp原创 2017-05-04 14:06:43 · 3871 阅读 · 0 评论 -
二叉树的经典面试题总结
1、二叉树的构造 2、遍历二叉树 3、求二叉树的高度(深度) 4、求二叉树中节点的个数 5、求二叉树中叶子节点的个数 6、求二叉树第K层的节点个数7、判断一个节点是否在二叉树中 8、求两个节点的最近公共祖先9、判断一棵二叉树是否是平衡二叉树10、求二叉树中最远的两个节点的距离 11、由前序遍历和中序遍历重建二叉树12、判断一棵树是否是完全二叉树13、求二叉树的镜像14、二叉搜索树->有序双链表原创 2017-05-04 16:20:45 · 9180 阅读 · 1 评论 -
实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。
解法1:利用递归(&&的短路特性)&&的短路特性:即A&&B中,加入A为假,那么B就不会被运算,因此我们只要将递归放在B中,而将终止条件放在A中即可解决该问题。。。 1 /************************************** 2 *文件说明:recursion.cpp 3 *作者:段晓雪 4 *创建时间:2017年07月15日 星期六 09时54分25秒 5原创 2017-07-15 13:59:12 · 1918 阅读 · 14 评论 -
快速排序的三种实现及两种优化
一、快速排序的概念快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、快排的三种实现方式实现方式一:左右指针法 算法思想:原创 2017-08-05 20:52:05 · 6972 阅读 · 0 评论 -
智能指针再解剖
智能指针模拟实现: http://blog.youkuaiyun.com/snow_5288/article/details/53262810在以上文章中,我们对库里的某些智能指针进行了模拟实现,今天就来学习解剖一下库里的智能指针的实现和使用。一、总括对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。 接口: - - 所有智能指针都原创 2017-09-21 13:07:45 · 864 阅读 · 0 评论 -
C/C++容易混淆的小知识点
1、函数传指针和传引用的区别? 1>指针定义时可以不初始化,但引用不行; 2>引用只能和一个实体结合,而指针可和多个实体结合; 3>自加减意义不同。指针的++表示指针向后偏移类型个字节,而引用则是+1,–类似; 4>sizeof求值的意义不同。Sizeof(指针)是指针所占的字节数,32位平台下为4,64位平台下为8(数组名除外),sizeof(引用)是指引用所指实体类型的大小; 5>没有原创 2017-08-12 19:27:57 · 2915 阅读 · 4 评论 -
继承----C++的三大特性之一
一,为什么要引入继承?二,继承的定义格式三,继承方式&访问限定符四,派生类的六个默认成员函数五,继承体系中的作用域六,赋值与转换----赋值兼容规则七,单继承&多继承&菱形继承原创 2016-10-25 09:34:09 · 5225 阅读 · 2 评论 -
【排序4】归并排序
【排序一】插入排序(直接插入排序&&希尔排序)【排序二】选择排序(选择排序&&堆排序)【排三】交换排序(冒泡排序&&序快速排序)一、归并排序1、基本思想 归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。算法原理:1>原创 2017-03-06 18:02:29 · 1006 阅读 · 0 评论 -
二叉树的线索化
测试环境:VS2010 一、线索二叉树的引入 二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。 为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。原创 2016-12-31 19:33:09 · 3135 阅读 · 0 评论 -
模板实现顺序表和链表
注:以下所有代码均在VS2010环境下测试C语言实现动态顺序表: http://blog.youkuaiyun.com/snow_5288/article/details/51558125C语言实现单链表: http://blog.youkuaiyun.com/snow_5288/article/details/52524830C++实现动态顺序原创 2016-11-12 14:05:57 · 6176 阅读 · 0 评论 -
模板的那丢丢事儿
注意:以下所有代码均在VS2010环境下调试运行模板的引入,函数模板,类模板的实例化、重载、特化等详解。原创 2016-11-08 13:09:49 · 4792 阅读 · 2 评论 -
多态---->C++的三大特性之二
一、多态性概述 1、多态引入---->数据的类型2、多态的概念3、函数重载&同名隐藏&重写4、纯虚函数&抽象类5、虚表剖析(单继承、多继承、虚拟继承、菱形继承)原创 2016-10-28 15:53:11 · 4065 阅读 · 0 评论 -
String类详解(浅拷贝,深拷贝,引用计数,写时拷贝)
String类:标准库类型string类表示可变长的字符序列,定义在std中,专门用来管理字符串,下面一起看下它的重要考点。一,浅拷贝 所谓浅拷贝,是指原对象与拷贝对象公用一份实体,仅仅是对象名字不同而已(类似引用,即对原对象起别名),其中任何一个对象改变都会导致其他的对象也跟着它变。如下面这段代码://浅拷贝class String{public:原创 2016-10-23 18:16:59 · 6463 阅读 · 3 评论 -
C++实现动态顺序表
#includeusing namespace std;#include#define DataType intclass Seqlist { friend ostream& operator<<(ostream &_cout,const Seqlist& s);public: Seqlist(); Seqlist(DataType arr[],size_t size);原创 2016-10-20 22:57:23 · 3452 阅读 · 0 评论 -
C++模拟打印日历
我们每天都看日历,可是它是怎么实现的呢,一起来看看!本文章包括打印日历 && 日期类的各种运算符重载...原创 2016-10-14 12:54:26 · 5361 阅读 · 0 评论 -
this指针的那些事儿
this指针也叫自引用指针,专门用来存放当前正在被调用对象的地址。原创 2016-10-08 22:11:51 · 3408 阅读 · 0 评论 -
构造函数详解
(一)构造函数的定义: 一种特殊的成员函数,主要用于为对象分配空间,进行初始化。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。原创 2016-09-27 17:16:07 · 7863 阅读 · 2 评论 -
将链表的所有奇数元素放于偶数元素前面
具体要求:头文件:#pragma once#include#include#includetypedef int DataType;typedef struct Node{ DataType data; struct Node *next;}*PNode,Node;void ParityRearrangement(PNode *pHead)原创 2016-09-22 23:30:40 · 4033 阅读 · 0 评论 -
复杂链表的复制
什么是复杂链表?答:每个节点包含两个指针域(next.random)和一个数据域(data),其中next指向下一个节点,而random可指向链表的任意节点(包括它本身)甚至NULL。以下面的例子为例进行复制:代码实现:#include#include#includetypedef int DataType;typedef struct ComplexN原创 2016-09-20 14:03:36 · 675 阅读 · 0 评论 -
Can you use map and set???
一、map和set的引入 我们都知道,STL在C++ 中得到了广泛使用,它不仅仅由于是提供了类似vector,list等方便使用的容器,更是因为它封装了许多复杂的数据结构算法和大量数据结构的操作。vector封装数组,list封装链表,而map和set则是用来封装二叉树的。 还有要知道的就说STL中的容器分为两大类:序列式容器和关联式容器,其中vector和li原创 2017-02-16 12:57:38 · 909 阅读 · 4 评论 -
【排序一】插入排序(直接插入排序&&希尔排序)
一、排序的分类原创 2017-03-01 15:08:43 · 2201 阅读 · 8 评论 -
【排序二】选择排序(选择排序&&堆排序)
【排序一】插入排序一、选择排序1、基本思想 顾名思义,选择排序就是每次选一个数据放到其应该出现的位置,以升序(降序)为例,首先选最小(最大)的数据放到正确位置,接着再选次小(次大)的数据放到合适的位置,以此类推,直到最大(最小)的数据被放入最后一个位置,排序就算完成。总体算法分三步完成:选数据--->将所选数据放入合适位置--->缩小需要排序的范围图解原创 2017-03-01 20:27:47 · 1446 阅读 · 1 评论 -
QT实现简单计算器
一、模块图二、核心算法 —– 中缀表达式转化为后缀表达式1、将中缀表达式转换为后缀表达式的算法思想: 1)计算机实现转换: ·开始扫描; ·数字时,加入后缀表达式; ·运算符: a. 若为 ‘(‘,入栈; b. 若为 ‘)’,则依次把栈中的的运算符加入后缀表达式中,直到出现’(‘,从栈中删除’(’ ; c. 若为 除括号外的其他运算符, 当其优先级高于除’(‘以外的栈原创 2018-01-29 10:22:50 · 14661 阅读 · 3 评论