
c和c++
文章平均质量分 77
flybeatles
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
String类,浅拷贝,深拷贝
想要使用C++中的类那么必须要有它的头文件,#include 。 首先来看下面一个代码: 这个程序很简单,但是如果有一个空指针呢?那么就需要判断了,并且用缺省值把有参数的string和没有参数的string合并在一起,那这个程序只需要做下面的改变: 既然你的构造函数开辟了一段空间,那么就需要释放掉,此时就需要析构函数: 以上就是整个程序在类中只有构造函数和原创 2017-03-30 20:15:56 · 289 阅读 · 0 评论 -
关于七大排序问题《一》
常见的排序如图所示: 首先依次来分析各个排序: 一:插入排序:a,直接插入排序: 插入排序一般应用于原创 2017-07-10 11:07:42 · 205 阅读 · 0 评论 -
模拟实现string深拷贝的两个版本
我们在http://write.blog.youkuaiyun.com/postedit/68495670博客中描述了string类的深浅拷贝问题,现在我们了解深拷贝两个版本,一个是传统写法,另一个是现代写法。 1,传统写法: #include using namespace std; class Mystring { public: Mystring(char* str)//初始化 :_str(n原创 2017-07-21 15:32:12 · 259 阅读 · 0 评论 -
二叉树——AVL
AVL二叉树的基本概念: AVL树又称为高度平衡的二叉搜索树,他既能保持二叉树的高度平衡,尽量降低二叉树的高度,又能减少树的平均搜索长度。 AVL树的性质: 1,左子树和右子树的高度之差的绝对值不超过一。2,树中的每个左子树和右子树都是AVL树。3,每个节点都有一个平衡因子,每个平衡因子的值等于右子树的高度减去左子树的高度并且平衡因子的值只能有三个值:1,-1,0。 我们以数组原创 2017-06-16 17:55:57 · 503 阅读 · 0 评论 -
关于七大排序问题《三》
7,快速排序: 快速排序与归并排序还是有原创 2017-07-11 17:05:17 · 197 阅读 · 0 评论 -
关于七大排序问题《二》
5冒泡排序: 冒泡排序的思想是(按照升序):如果前一个数大于后一个数,那么就交换,如图所示: 冒泡排序实现的实现:原创 2017-07-10 15:41:54 · 231 阅读 · 0 评论 -
二叉树--堆
对数据结构是一种数组对象,它可以被视为一颗完全二叉树结构原创 2017-06-02 23:10:01 · 211 阅读 · 0 评论 -
智能指针
智能指针其实是一种类,体系。智能指针不等同于RAII。智能指针是RAII的一种应用,智能管理释放,能够像指针一样使用。正常赋值拷贝(解决多个智能指针对象管理同一块资源释放多次的问题)。 首先来看C++早期智能指针auto_ptr的模拟实现: #include using namespace std; template class Auto_ptr { public: Auto_ptr(T*原创 2017-05-20 09:37:46 · 175 阅读 · 0 评论 -
(一)STL之list
首先我们了解STL的基本概念:STL不仅仅是一个可复用的组件库,而且是一个包含算法和数据结构的软件框架 STL有六大组件: 1,容器---各种数据结构(vector,list,map,set) 2,迭代器---扮演容器和算法的胶合剂 3,空间分配器---负责内存空间的分配与管理 4,配接器---一种修饰容器或者仿函数或者迭代器接口的东西 5,算法---各种常见算法(sort,searc原创 2017-05-19 08:11:40 · 176 阅读 · 0 评论 -
时间复杂度与空间复杂度的基本概念
时间复杂度: 时间复杂度是指计算函数执行的基本次数,这里所指的函数是指数学里面的函数。 计算时间复杂度的时候一般会采用取大舍小的方法,比如时间复杂度=N^2+10,我们就会舍去10 一个函数的算法我们也分好几种情况,而我们一般都是考虑最坏的情况。 最好情况:输入的次数是函数运行的最小运行时间。 最坏情况:输入的次数是函数的最大运行时间。 平均情况:输入的次数是函数运行次数期望的运行时间原创 2017-05-25 11:19:25 · 1334 阅读 · 0 评论 -
覆盖
#include using namespace std; class A { protected: int m_data; public: A(int data = 0) { m_data = data; } int GetData() { return doGetData(); } virtual int doGetData() { return原创 2017-04-23 14:27:29 · 185 阅读 · 0 评论 -
关于异常
异常的概念: 是当一个函数发现自己无法处理的错误时抛出异常,让函数的调用者直接或者间接的处理这个问题。 关于异常的引入程序: #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; class Exception { public: Exception(int id, const char*原创 2017-05-13 11:22:18 · 210 阅读 · 0 评论 -
判断支不支持分离编译
为什么模板不支持分离编译?什么时候会出现连接错误? 如果是普通函数在一个.cpp文件中申明,在另外一个.cpp文件中定义时,是可以编译且链接的,但是当不存在定义时,会出现连接错误。 我们具体来分析这类的问题吧: 一个程序写好之后运行的话会有4个步骤,分别是,预处理,编译,汇编,链接。原创 2017-05-10 18:05:09 · 205 阅读 · 0 评论 -
模板的特化和萃取
模板的特化可以分为全特化和偏特化。 首先来看模板全特化的例子: #include using namespace std; template class Seqlist { public: Seqlist() { cout ->memcpy" << endl; } }; template<> class Seqlist { public: Seqlist() { cout原创 2017-05-10 17:53:47 · 367 阅读 · 0 评论 -
模板《一》
首先知道,模板函数不是一个函数,它只是实现具体函数的工具。我们举一个简单的例子,写一个加法函数: #include using namespace std; int Add(int left, int right) { return left + right; } char Add(char left, char right) { return left + right; } int mai原创 2017-04-15 09:48:14 · 331 阅读 · 0 评论 -
继承《二》
在上篇博客继承《一》中我们所了解的继承全部都是单继承,而我们现在来看继承的其他种类。 一:多继承: 那什么是多继承?我们把一个派生类有两个或者有两个以上的基类的继承称之为多继承。 举一个例子: #include using namespace std; class B1 { public: int _b1; }; class B2 { public: int _b2; }; cl原创 2017-04-06 11:22:26 · 353 阅读 · 0 评论 -
继承《一》
继承的概念: 继承是面向对象程序设计使代码可以复用的最重要的手段,它容许程序员在保持原有类型特性的基础上进行扩展,增加功能。这样产生的类叫新生的类,叫派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知程度。 继承的定义格式: 他们在内存中的布局如图所示:说明他们有两个作用域 而继承方式有三种,分别是:public(公有继承),protect原创 2017-04-04 22:35:07 · 258 阅读 · 0 评论 -
多态
多态简单说就是多种形态。 多态可以分为静态多态和动态多态。静态多态是在编译期间完成的,编译器会根据函数实参的类型,可以推断出想要调用的那个函数,要是没有能够调用的函数,那么编译就会出错。比如: #include using namespace std; int ADD(int i, int j) { return i + j; } double ADD(double i, double j)原创 2017-04-06 11:30:07 · 200 阅读 · 0 评论 -
简聊红黑树
一:红黑树的基本概念:由红黑两个色节点组成的二叉搜索树满足下面的条件就叫做红黑树: 1,每个节点不是红色就是黑色。 2,根节点是黑节点。 3,如果有一个节点是红节点,那么它的两个子节点就肯定是黑节点。 4,对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑节点。 二:红黑树的插入我们可以分好几种情况 1,(cur有可能是一个新增节点,也有可能是由于下面的操作变红)原创 2017-07-23 11:26:48 · 291 阅读 · 0 评论