- 博客(22)
- 收藏
- 关注
原创 智能指针
一.智能指针 1.定义 所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放 2.智能指针发展历史 3.auto_ptr/scoped_ptr/shared_pr/weak_ptr的设计思想、缺陷template<class T>class AutoPtr{public: AutoPtr(T* ptr) :_ptr(ptr)
2017-09-28 19:24:34
338
原创 为什么模板不支持分离编译
//test.h 声明一个函数func()void func();//test.cpp 实现func函数#include"test.h"void func(){}//main.cpp 调用func函数int main(){ func();}编译器会对以上代码进行处理: test. cpp和main.cpp各自被编译成不同的.obj文件,在main.cpp中,调
2017-09-23 12:03:41
353
原创 多态&多态对象模型
1:什么是多态? 多态就是多种形态。 满足构成多态的条件:必须有虚函数的重写(函数名,参数,返回值均相同,协变除外) 父类的指针或引用调用虚函数 多态跟类型无关而和对象有关,如果不构成多态则与类型有关 父类必须为虚函数,子类可以是也可以不是,构造函数不能为虚函数。class A{public: virtual
2017-08-06 18:25:33
386
原创 C++实现双链表
C++简单实现顺序表和单链表 双链表#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* _next; ListNode* _prev; DataType _data; ListNode(DataType x
2017-07-26 15:13:33
350
原创 String--引用计数写时拷贝
写时拷贝 class String{public: String(char* str = "") { _str = new char[strlen(str) + 1]; _refCountPtr = new int(1); strcpy(_str, str); } ~String() {
2017-07-26 14:47:02
344
原创 菱形继承
继承继承是用来实现复用,是类型之间的关系建模。 继承关系有public(公有继承),protected(保护继承),private(私有继承)class A{public: void f1() { cout << "A::f1()" << endl; }public: int _a;};class B :public A //A为父类
2017-07-26 14:29:07
307
原创 C++简单实现顺序表和单链表
c顺序表#include <iostream>#include <assert.h>using namespace std;typedef int DataType;class SeqList{public: SeqList() : _array(NULL) , _size(0) , _capacity(0) {} Seq
2017-07-20 11:57:14
507
原创 讨论构造拷贝构造的N中调用情况的问题
C++对传参合传返回值时构造的优化处理C++形式参数类型和返回值类型如果是引用,那么在传递时,会把实参或者返回值的引用自动 赋值给形式参数(返回值)。C++返回值赋值和返回值的使用往往会进行编译器的优化,例如:下面的调用中,只会调用两次构造函数(一次是默认构造函数,另外一次是自动 拷贝构造函数)。 只有在一个表达式内才会优化 Test1中调用了次AA的拷贝构造函数次AA的赋值运算符函数的
2017-07-15 22:00:26
344
原创 C/C++动态内存管理
1:总结并剖析malloc/free和new/delete之间关系和差异。 2:剖析new/delete、new[]/delete[]到底做了些什么事情。 3:实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。 C动态内存管理C语言使用malloc/realloc/calloc/free进行动态内存管理realloc=>指针给空时,与mallo
2017-07-14 13:41:11
405
原创 C++类和对象:四个默认函数和运算符重载
一.类 1.类的定义 类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance) ,拥有类的成员变量和成员函数。class Person{public: void Display() { cout << _name << ":" << _age << ":"
2017-06-25 14:33:12
832
原创 链表—复杂链表的复制
复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。//ps: 复杂链表的结构 struct ComplexNode { int _data ; // 数据 struct ComplexNode * _next; // 指向下一个节点的指针
2017-06-24 16:31:53
332
原创 链表—两个链表的相交问题
1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】1.分析:在已知链表不带环时,如果两个链表的尾部相同则相交,用快慢指针求交点。ListNode* GetMeetNode(ListNode* list1,ListNode* list2)//判断相交点{ ListNode* cur1 =
2017-06-23 16:29:52
437
原创 链表——带环问题
判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度分析:不带环fast指针可以走到尾,带环则走不到;若带环fast指针一次走两步,slow指针一次走一步。(fast和slow的间距会逐渐缩小,一次缩小1,不会错过,其余走法可能会跳过,或者构成死循环);入口点:第二次的相遇点ListNode* IsHaveLoop(ListNode* pli
2017-06-23 15:18:39
418
原创 单链表基础题总结分析
1.从尾到头打印单链表 2.在无头单链表的一个节点前插入一个节点 3.单链表实现约瑟夫环 4.逆置/反转单链表 5.单链表排序(冒泡排序&快速排序) 6.合并两个有序链表,合并后依然有序 7.查找单链表的中间节点,要求只能遍历一次链表
2017-06-19 22:26:50
415
原创 CPP入门基础知识
一.CPP和C语言的不同 1. cpp和C语言的头文件不同 C语言的头文件一般用#include<stdio.h>而cpp的头文件为#include<iostream>而在cpp的头文件之后还有 using namespace std; 命名空间使用namespace来声明,std命名空间是C++中标准库类型对象的命名空间,命名空间实际上是一个作用域 2.输入和输出的区别
2017-06-18 16:45:31
5105
原创 无头单链表的非尾节点删除
删除一个无头单链表的非尾节点 分析:例如链表1->2->3->4如果要删除节点3,则将节点4前移,再删除节点3void EraseNon Tail(ListNode* pos){ assert (pos&& pos->next); ListNode* next=pos->next; pos->data=next->data; pos->data=next->next; fr
2017-06-15 20:39:47
468
原创 比较顺序表和链表的优缺点
线性表分为顺序表和链表,链表又分为单链表,双向链表和循环链表。对于链表的结构又分为带头链表和不带头链表。 一,顺序表 定义:将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。采用顺序存储结构的线性表简称为“ 顺序表”。 特点:1.存储空间连续,即允许元素的随机访问 2.长度固定,必须在分配内存之前确定数组的长
2017-06-15 20:19:11
6451
原创 C语言静态顺序表的实现
#include<stdio.h>#ifndef __SEQ_LIST__#define __SEQ_LIST__#define MIX_SIZE 5typedef int DataType;typedef struct SeqList{ DataType seqList[MIX_SIZE]; size_t size;}SeqList;void InitSeqList(SeqL
2017-04-13 15:18:24
415
原创 C语言动态顺序表的实现
1、用于存放声明的头文件#pragma once //避免重复引入头文件,作用于预编译指令几乎相同#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <assert.h>#include <malloc.h>typedef int DataType;typedef struct SepList_d{ DataTy
2017-04-13 15:11:57
390
原创 Linux中关于task_struct结构体的解析
为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块。 在linux系统中,这就是task_struct结构,在include\linux\sched.h文件中定义。 每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息, 在任何时候操作系统都能跟踪这个结构的信息。
2017-04-10 14:47:30
675
原创 关于malloc函数的用法
一,函数声明malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以通过类型转换强制转换为任何其它类型的指针如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.内存分配例如char *p =
2017-03-29 14:40:40
1739
原创 关于This指针的理解和应用
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例如,调用d
2017-03-20 21:06:46
791
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人