
c++
文章平均质量分 50
zhuohaiyy
这个作者很懒,什么都没留下…
展开
-
模拟实现智能指针SharedPtr
在上一篇博客中我们说了下模拟实现AutoPtr,ScopedPtr 在这篇博客我们会来谈到模拟实现SharePtr首先我们先来一个小小的区分三个智能指针 1,AutoPtr:管理权的转移(严重缺陷,尽量不要使用) 2,ScopedPtr: 简单粗暴—防拷贝(只声明不定义) 3,SharePtr:共享,引用计数,功能强大,循环引用,但是较为复杂下面我们来模拟实现一下SharePtrtempla原创 2017-04-14 12:25:10 · 637 阅读 · 0 评论 -
模拟实现string——写时拷贝
模拟实现string——深浅拷贝 上篇文章谈到了浅拷贝的缺陷,我们可以用深拷贝和写时拷贝改善 深拷贝其实也是有缺陷的——每次的开辟空间消耗太大 下面我们来介绍一下写时拷贝 引用计数的写时拷贝是基于引用计数的浅拷贝那么什么是写时拷贝:其实写时拷贝的意思就是: 当你读取到这个空间的时候,并不会开辟出一个一模一样的空间出来给你,当你真正需要拷贝的时候,那么他就会开辟出空间给你。 当我们要对原创 2017-07-23 17:48:21 · 367 阅读 · 0 评论 -
内存分配——静态存储区 栈 堆
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指转载 2017-10-17 13:14:33 · 418 阅读 · 0 评论 -
C++模板及用模板实现双向循环链表,顺序表
模板是泛型编程的基础。 所谓泛型编程就是编写与类型⽆关的逻辑代码,是⼀种复⽤的⽅式。 模板分为模板函数和模板类。函数模板格式:template <class 形参名1, class 形参名2, class 形参名n>返回类型 函数名(参数列表){ ...}模板形参的定义既可以使⽤class,也可以使⽤typename,含义是相同的。注:模板未实例化时,代码内部的语法错误检测不原创 2017-08-04 20:22:08 · 526 阅读 · 3 评论 -
C++实现顺序表基本函数以及增删查改
下面的代码是我们用C++实现的顺序表,其中头插头删,尾插尾删函数可以复用Insert函数,和Erase函数。#include<iostream>#include<windows.h>#include<assert.h>using namespace std;typedef int DataType;class SeqList{public: SeqList() :原创 2017-07-27 21:22:29 · 1405 阅读 · 1 评论 -
用C++实现双链表的增删查改以及双向链表的逆转
在我们实现双向链表的增删查改时一定要注意各种情况 分析各种情况我们才能更好的掌握增删查改以下是双向链表增删查改的代码。#include<iostream>#include<assert.h>#include<windows.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* _next;原创 2017-07-27 15:01:13 · 1051 阅读 · 1 评论 -
C++中 引用 和 const
在C++中,引用是给已经存在的变量取一个别名,引用既可以传值也可以达到指针的效果,它和它的引用的变量共用同一块内存空间。1.引用定义的格式为: 类型 &对比指针和引用1. ⼀个变量可取多个别名 2. 引对比原创 2017-08-17 11:08:58 · 272 阅读 · 0 评论 -
C++继承与菱形继承
继承是⾯向对象复⽤的重要⼿段。 通过继承定义⼀个类,继承是类型之间的关系建模,共享公有的东西,实现各⾃本质不同的东西。我们类成员访问限定符有三种: public(公有),protected(保护),private(私有) 我们的继承关系也有三种: public(公有继承),protected(保护继承),private(私有继承)下面是一个简单的继承:class A//基类(父类){pu原创 2017-08-01 17:17:32 · 547 阅读 · 0 评论 -
C++中多态与对象模型及菱形继承
多态多态就是多种形态,C++的多态分为静态多态和动态多态。 1. 静态多态就是重载,因为是在编译期决议确定,所以称为静态多态。 2. 动态多态就是通过继承重写基类的虚函数实现的多态,因为是在运⾏时决议确定,所以称为动态多态。上篇博客讲到继承 关于菱形继承的对象模型该文也有出现 需要的可以了解 继承与菱形继承构成多态的条件1,虚函数重写 (1)虚函数 (2)子类与父类虚函数的原创 2017-08-02 18:07:03 · 511 阅读 · 2 评论 -
区分重载,重写(覆盖),重定义(隐藏)
重载: 1,在同一作用域中 2,函数名相同,参数不同 3,返回值可以不同重写(覆盖): 1,不在同一作用域中(分别在子类和父类中) 2,函数名,参数,返回值相同(协变除外,协变的返回值不同)。 3,基类函数必须有virtual(最好都写)。 4,访问修饰符可以不同。重定义(隐藏): 1,在不同作用域(分别在子类和父类中)。 2,函数名相同。 3,在子/父类只要不构成重写就是重定义原创 2017-08-02 18:27:34 · 294 阅读 · 0 评论 -
模拟实现string(深浅拷贝,传统现代写法)
模拟实现string浅拷贝首先我们了解一下浅拷贝 浅拷贝是系统自动生成的也叫做值拷贝。class String{public: String(char* str) :_str(str) {} String(const String& s) :_str(s._str) {} ~String() { dele原创 2017-07-21 17:54:57 · 397 阅读 · 0 评论 -
用C++实现单链表的基本函数以及增删查改
用C++实现双链表的增删查改以及双向链表的逆转C++实现顺序表基本函数以及增删查改单链表: 链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。#include<iostream>#include<windows.h>#include<assert.h>using namespa原创 2017-07-29 18:28:22 · 1463 阅读 · 0 评论 -
C++中二分查找(递归,非递归)
二分查找:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。 二分查找要求: 1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 这是我们二分查找的步骤 假设表中元素是按升序排列,将表中间位置记录mid与查找关键字key比较,如果两者相等,则查找成功;否则利用中间位置mid将表分成前、后两个子表,如果中间位置mid大于查找原创 2017-04-24 12:32:40 · 986 阅读 · 0 评论 -
C++中异常处理
异常处理 异常,当⼀个函数发现⾃⼰⽆法处理的错误时抛出异常,让函数的调⽤者直接或间接的处理这个问题。 C++异常处理机制的组成部分: try(检查) ,throw(抛出),catch(捕获)。 throw:异常检查部分使用throw表达式来表示它遇到了无法处理的问题,即throw引发了异常。catch:捕获异常,处理异常。try:异常处理部分使用try语句块处理异常,try语句块中代码抛出的异原创 2017-04-19 13:54:52 · 301 阅读 · 0 评论 -
智能指针AutoPtr,ScopedPtr的模拟实现
智能指针: 所谓智能指针就是智能/⾃动化的管理指针所指向的动态资源的释放 为什么我们会有智能指针呢,我们通过下面的代码来看一下 void DoSomeThing () { throw 2 ; } void Test2 () { int* p1 = new int(2); try { DoSomeThing(原创 2017-04-13 16:44:10 · 571 阅读 · 0 评论 -
模拟实现string——增删查改
我们上篇和上上篇谈到了模拟实现string——深浅拷贝以及写时拷贝 这篇介绍一下增删查改首先介绍一下它 的接口void PushBack(char ch) void PushBack(const char* str) void PopBack() void Insert(size_t pos, char ch) void Insert(size_t pos, const ch原创 2017-07-25 22:20:36 · 387 阅读 · 1 评论