
c++
wyn126
跑够一万公里就结婚
展开
-
单链表和双链表的实现
单链表的实现#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct sListNode{ sListNode*_next; DataType _data; sListNode(DataType x) : _data(x) ,原创 2017-07-26 14:45:24 · 318 阅读 · 0 评论 -
设计模式:单例模式
首先来了解一下什么是单例模式单例模式是一种软件设计模式,在它的核心结构中,只包含一个被叫做单例模式的类,通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例优点:(1)单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问...原创 2018-09-19 11:26:08 · 183 阅读 · 0 评论 -
空间配置器
stl六大组件简介 我们知道,stl有容器,空间配置器,适配器,迭代器,仿函数以及算法这6个组件,它们六者关系大概如下:容器通过配置器取得数据存储空间,算法通过迭代器获取容器内容,仿函数可以协助算法完成不同的策略变化,配接器可以修饰或套界仿函数。侯捷在《STL源码剖析》一书讲到: 空间配置器:为了解决因频繁小块开辟时,产生的内存碎片问题。 如果开辟的内存大于128个字节时,就调用一级...原创 2018-07-27 16:32:09 · 185 阅读 · 0 评论 -
二叉树的线索化
1.为什么要对二叉树进行线索化? 一棵普通的二叉树,只能找到该节点的左右孩子信息,并不能知道该节点的直接前驱或后继信息。这种信息只有在动态遍历的过程中才能得到,因此我们引入线索二叉树来保存这些动态过程中得到的前驱和后继的信息。有n个节点的二叉树,必定存在n+1个空指针域,我们可以充分利用这些空指针域,来保存当前节点的前驱和后继信息。 在这里,我们引入了两个标志...原创 2018-04-08 15:37:01 · 6674 阅读 · 1 评论 -
模板的定义、使用及特化
模板是泛型编程的基础,所谓模板就是编写与类型无关的代码,模板是一种复用的手段,模板分为模板函数和模板类。 比如说,我们要实现一个判断两个数是否相等的函数,传递的两个参数不同,如果没有模板,就需要各自实现一份代码,而有了模板之后,只需要实现一份代码即可,编译器就会根据传递的参数自动推演出模板形参的类型。有时候当我们传递的两个函数的参数类型不相同时,编译器就会报错,这时,我们就需要对模板参数显示实例...原创 2018-04-08 11:08:18 · 622 阅读 · 0 评论 -
模板的分离编译
模板为什么不支持分离编译 要了解这个问题,我们先来看一下程序在计算机中的执行过程,用一幅图简单说明。 在一个规范的C++文件中,我们通常把一个文件分为:文件声明,文件实现和文件测试三个部分。 在一般的编译环境中,.h文件的代码都会扩展到.cpp里面,然后编译器对.cpp文件编译形成.obj文件,.cpp以分离的方式编译完成后,经过连接器连接生成.exe文件。 我们来看一个例子:test.原创 2017-08-05 19:49:50 · 601 阅读 · 0 评论 -
多态&多态对象模型
1:什么多态? 当使用基类的指针或引用调用重写的虚函数时,指向父类调的就是父类的虚函数,指向子类调的就是子类的虚函数。 下面我们来看一段代码#include<iostream>using namespace std;class AA{ virtual void fun1() { cout << "AA::fun(1)" << endl; }pri原创 2017-07-28 13:24:27 · 267 阅读 · 0 评论 -
链表的实现
双链表的实现#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* next; ListNode* prev; DataType data; ListNode(DataType x) :ne原创 2017-07-26 14:40:01 · 207 阅读 · 0 评论 -
虚函数和多态
虚函数的概念 在类的成员函数前加virtual关键字,这个成员函数称为虚函数。 虚函数重写–当在子类的定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数。#include<iostream>using namespace std;class Personpublic: virtual void BuyTickets() {原创 2017-07-26 14:21:58 · 252 阅读 · 0 评论 -
菱形继承
什么是继承 继承是面向对象的一种复用手段,通过继承创建一个类,继承是类之间的关系建模,共享共有的东西,是现各自不同的东西。 继承有三种方式:公有继承 保护继承 私有继承 三种继承方式下派生类成员访问基类成员的访问关系 注意:不可见,并不是说对象不存在。 如果一个成员定义为私有成员,只有在类内部可以访问,如果一个对象不想被基类对象直接访问,但在派生类中可以被访问,就将其定义为保护成员原创 2017-07-21 20:42:32 · 283 阅读 · 0 评论 -
C/C++动态内存管理
1:总结并剖析malloc/free和new/delete之间关系和差异。 mallloc和free分别用于执行动态内存的分配和释放void *malloc(size_t,size);void free(void pointer);malloc分配的是一块连续的空间,如果操作系统无法向malloc提供更多的内存空间,malloc就返回一个NULL,malloc的返回值是void*,free的参原创 2017-07-16 11:08:56 · 366 阅读 · 0 评论 -
类和对象——四个默认成员函数+运算符重载
1.类和对象的基础知识,如类的定义,访问限定符,面向对象封装性,对象的大小计算等等。类的定义:类(Class)实际上是某种类型的对象变量和方法的原型.类是从一些具有相同属性或功能的具体实例中抽象出共有的一些属性。 类是一个新的数据类型,它和结构体有点相似,是由不同数据类型组成的集合体,但类要比结构体增加了操作数据的行为,这个行为就是函数,还有一个区别就是类内存在类成员访问的修饰限定符。 ·cla原创 2017-06-27 16:29:37 · 334 阅读 · 0 评论 -
CPP入门基础知识
一.命名空间 1.命名空间的定义 命名空间的名字在其所在作用域中是唯一的,命名空间可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义,命名空间作用域不能以分号结束。 (1)每个命名空间都是一个作用域 命名空间中的每个名字必须引用该命名空间中的唯一实体,命名空间中的实体称为命名空间的成员,不同命名空间的成员可以具有相同的名字。 命名空间内部各成员之间可以直接访问,外部的原创 2017-06-19 19:14:42 · 1177 阅读 · 0 评论 -
智能指针的发展史
1 .智能指针的发展史 智能指针的发展要从RAII说起,RAII要求,资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配(获取),同时由析构函数完成资源的释放。在这种要求下,只要对象能正确地析构,就不会出现资源泄露问题。 (1)C++98提出auto _Ptr,auto_Ptr的设计是让两个指针指向同一块空间,但是这样会存在释放不当,出现程序崩溃的问题。 (2)在原创 2017-08-04 18:05:41 · 481 阅读 · 0 评论 -
内存碎片的产生及处理
https://blog.youkuaiyun.com/tong5956/article/details/74937178原创 2018-09-19 19:18:11 · 308 阅读 · 0 评论