![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 59
青云衣兮白霓裳
这个作者很懒,什么都没留下…
展开
-
C++类和对象——四个默认成员函数+运算符重载
1:整理类和对象的基础知识,如类的定义,访问限定符,面向对象封装性,对象的大小计算等等。 2:整理四个默认成员函数及运算符重载相关知识 3:整理隐含的this指针等等,及对运算符重载背后做的事情。原创 2017-10-16 21:48:49 · 316 阅读 · 0 评论 -
二叉树
C++实现的二叉树的基本功能包括前中后序的递归和非递归访问,求结点个数和叶子结点个数,还有求树高。其中比较难理解的就是前中后序的非递归访问。 非递归算法分析 1)前序遍历非递归 步骤如下: 代码如下:void PrevOrder_NonR() { stack<Node*> s; Node* cur = _roo...原创 2017-12-25 14:52:19 · 519 阅读 · 0 评论 -
平衡树(AVL)
1 概念 1.1 定义 AVL树又称为高度平衡的二叉搜索树,是1962年有俄罗斯的数学家G.M.Adel’son-Vel’skii和E.M.Landis提出来的。它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度 1.2 性质左子树和右子树的高度之差的绝对值不超过1树中的每个左子树和右子树都是AVL树注实现平衡树可采用的方法之一: 每个节点都有一个平衡因子(b...原创 2018-04-08 16:30:35 · 552 阅读 · 0 评论 -
红黑树(RBTree)
1 红黑树原理分析 1.1 规则 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树是满足下面规则的二叉搜索树:每个节点,不是红色就是黑色的根节点是黑色的如果一个节点是红色的,则它的两个子节点是黑色的对每个节点,从该节点...原创 2018-04-03 16:31:11 · 573 阅读 · 0 评论 -
二叉搜索树
1 概念 二叉搜索树的性质:每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。左子树上所有节点的关键码(key)都小于根节点的关键码(key)。右子树上所有节点的关键码(key)都大于根节点的关键码(key)。左右子树都是二叉搜索树。2 分析 二叉搜索树代码实现就要包括插入和删除节点,下文就二叉树的插入和删除节点进行分析。 2.1 非递归 2.1....原创 2018-04-23 22:00:25 · 487 阅读 · 0 评论 -
set和map增删查改的使用
1 map2 set原创 2018-05-14 16:51:06 · 1047 阅读 · 0 评论 -
Huffman Tree——文件压缩
1 Huffman树的压缩和解压缩原理2 文件压缩(Huffman树的实战应用) 2.1 原理分析2.2 代码实现//Heap.h#pragma once#include &amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;#include&amp;lt;vector&amp;gt;#include&quot;as原创 2018-05-08 16:51:02 · 536 阅读 · 0 评论 -
HashTable——开放定址法的哈希表
enum State { EMPTY = 1, EXITS = 2, DELETE = 3, }; template struct HashNode { K _key; V _value; State _state; HashNode() :_state(EMPTY) {} }; template struct _HashFunc { size_...原创 2018-05-30 22:24:42 · 1147 阅读 · 0 评论 -
HahTable——拉链法实现的哈希表
template struct HashNode { ValueType _valueField; HashNode* _next; HashNode(const ValueType&amp;amp;amp;amp;amp; valueField) :_valueField(valueField) ,_next(NULL) {} }; template&amp;amp;amp;amp;gt; class HashTable { ...原创 2018-05-31 17:47:53 · 1223 阅读 · 0 评论 -
HahTable——封装实现unordered_map和unordered _set
template struct HashNode { ValueType _valueField; HashNode* _next; HashNode(const ValueType&amp;amp; valueField) :_valueField(valueField) ,_next(NULL) {} }; template class HashTable; templ...原创 2018-05-31 18:17:16 · 694 阅读 · 0 评论 -
排序
1 插入排序 1.1 直接插入排序 1.2 希尔排序 2 选择排序 2.1 选择排序 2.2 堆排序 3 交换排序 3.1 冒泡排序 3.2 快速排序 4 归并排序 5 计数排序和基数排序...原创 2018-06-26 16:54:56 · 484 阅读 · 0 评论 -
布隆过滤器BloomFilter
typedef const char* KeyValue; typedef size_t(*HASH_FUNC)(KeyType str); typedef struct BloomFilter { BitMap _bm; //size_t* _bm; HASH_FUNC _hashfunc1; HASH_FUNC _hashfunc2; HASH_FUNC _hashfunc...原创 2018-06-27 17:08:36 · 1406 阅读 · 0 评论 -
设计模式
http://www.runoob.com/design-pattern/adapter-pattern.html 一、状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图:允许对象在内部状态发生改变时改变它的行为,对象...转载 2018-09-13 21:58:41 · 708 阅读 · 0 评论 -
C++复习
http://www.runoob.com/cplusplus/cpp-tutorial.html原创 2018-09-13 21:59:24 · 832 阅读 · 0 评论 -
分页存储问题
https://blog.csdn.net/aaa_a_b_c/article/details/79836284 https://www.cnblogs.com/shenckicc/p/6884921.html https://blog.csdn.net/Sun_Jianhua/article/details/33574 https://baike.baidu.com/item/基本分页存储...原创 2018-09-13 22:30:08 · 461 阅读 · 0 评论 -
0/1背包问题
https://blog.csdn.net/xp731574722/article/details/70766804 https://blog.csdn.net/fx677588/article/details/68951593 https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html https://blog.csdn.ne...原创 2018-09-13 22:33:14 · 616 阅读 · 0 评论 -
栈和队列
1.实现基本栈和队列。 2.实现栈和队列的面试题。 (1)实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) (2)使用两个栈实现一个队列 (3)使用两个队列实现一个栈 (4)判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列,入栈的序列(1,2,3,4,5),出栈序列为(1原创 2018-09-13 22:33:59 · 464 阅读 · 0 评论 -
二叉树线索化
1 原理分析 线索化意义: 二叉树是非线性结构,遍历二叉树都是通过递归或者用栈辅助非递归来遍历的。 1)不借用栈或者队列来实现遍历的非递归,还有一种方法是线索化。 2)为了实现迭代器,面向对象。 如果我们知道一个节点的前驱和后继,那么我们就可直接遍历二叉树。 设置二叉树节点的前驱和后继,就是线索化二叉树,我们利用指向左右子树的空指针存放节点的前驱和后继。 线索化设计思路: 遍历二...原创 2018-05-08 16:04:42 · 544 阅读 · 0 评论 -
实现迷宫和表达式计算问题
1.实现迷宫的递归非递归。 1)迷宫的非递归算法2)迷宫的递归算法2.实现迷宫的最优解问题。 3.实现表达式计算问题。 struct Pos{int _row;int _col;};templateclass Maze{public://Maze(int maze[][N])Maze(int* maze)void Print()bool CheckIsAc原创 2017-12-13 16:05:40 · 225 阅读 · 0 评论 -
讨论构造拷贝构造的N种调用情况问题
1.先总结C++对传参和传返回值时构造的优化处理。 1)在c++中,传参和传返回值时,如果是引用类型,则不用调用拷贝构造函数,直接返回别名。 当语句为一个表达式时,编译器会选择优化,将构造函数与拷贝构造合并。 在C++中,调用几次构造函数和拷贝构造函数,就会相应的调用几次析构函数。 2)系统在什么情况下会进行优化呢? 1>当拷贝构造存在连续的赋值情况的时候, 2>当多个临时对象连续赋值的时原创 2017-10-18 10:02:28 · 198 阅读 · 0 评论 -
C++入门基础知识
1.命名空间 名字空间域是随C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:namespace name1{ int a=0;}namespace name2{ int a=1;}name1::a=3;name2::a=4;作用:名字空间域解决全局命名冲突的问题。原创 2017-10-16 21:46:48 · 139 阅读 · 0 评论 -
引用计数写时拷贝
分析写时拷贝。 完成写时拷贝的各种方案。原创 2017-10-29 18:49:20 · 356 阅读 · 0 评论 -
String类增删改查的实现
实现String类的增删改查,代码如下://Stringclass.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<string>#include<iostream>#include"assert.h"using namespace std;class Stringclass{public: Stringclas原创 2017-10-22 16:01:26 · 532 阅读 · 0 评论 -
C++实现双向链表
C++实现双链表代码如下:#pragma once#include<iostream>#include"assert.h"#include"string.h"using namespace std;typedef int DataType;struct ListNode{ ListNode* _next; ListNode* _prev; DataType _dat原创 2017-11-09 16:54:10 · 268 阅读 · 0 评论 -
C++实现顺序表和单链表
1、顺序表 C++实现顺序表代码如下://Seqlist.h#pragma once#include<iostream>#include<string.h>#include<assert.h>typedef int DataType;class SeqList{public: SeqList()//构造函数 :_array(NULL) , _si原创 2017-10-29 18:50:30 · 491 阅读 · 0 评论 -
C++动态内存管理
一、知识回顾: 1、C语言中使用malloc/calloc/realloc/free进行动态内存管理。 其中malloc与calloc区别是:malloc开辟空间时没有初始化,calloc开辟空间时初始化为0。 realloc一般用于扩容,包含两个参数(指针,容量大小),当指针为空时,等同于malloc;当指针不为空时:1)当指针后的空间大于等于要开辟的空间时,接着原来的空间开辟;2)当指针后原创 2017-10-22 15:59:22 · 175 阅读 · 0 评论 -
String 深拷贝
class String { private: char* _str; }; 1.传统写法完成String深拷贝。 2.现代写法完成String深拷贝。原创 2017-10-22 16:02:04 · 298 阅读 · 0 评论 -
菱形继承
1:分析菱形继承的问题。 菱形继承结构如下图所示: Assistant的对象中有两份person成员,菱形继承存在二义性和数据冗余的问题。class person{public: string _name;//姓名};class Student:public person{protected: int _num;//学号};class Teacher:publ原创 2017-11-05 15:50:50 · 172 阅读 · 0 评论 -
智能指针
为什么要用智能指针 智能指针是为了解决内存泄漏问题,在大型工程中,即时足够小心的保证new和delete 匹配出现。但无法避免throw的异常抛出导致一段程序的提前结束而产生的内存泄漏。 例如:#include<iostream>using namespace std;void FunTest(){ int *p=new int[10]; FILE* file=fopen(原创 2017-11-29 17:34:29 · 122 阅读 · 0 评论 -
C++完成日期类的实现——Date
//dateclass.h#pragma once#include<iostream>#include"assert.h"class Date{public: Date(int year = 1900, int month = 1, int day = 1) :_year(year) , _month(month) , _day(d原创 2017-11-30 17:12:38 · 316 阅读 · 0 评论 -
模板的类型萃取
分析类型萃取问题 功能: 类型萃取,在STL中用到的比较多,用于判断一个变量是否为POD(plain old data,平凡类型)类型。 简单来说可以用来判断出某个变量是内置类型还是自定义类型。 通过类型萃取,萃取到变量类型,对不同变量进行不同处理,可以提升程序效率。 应用场景: 例如实现顺序表,在对顺序表进行扩容时,利用类型萃取,重新开辟内存、拷贝对象原创 2017-11-22 23:17:13 · 253 阅读 · 0 评论 -
模板的分离编译
分析模板分离编译 1 分析为什么模板不支持分离编译 1.1 程序编译的基本流程 下面是普通类分离编译的代码://*****************test.h******************#pragma once #include<iostream>using namespace std;#include<stdlib.h> void fun(); //**********原创 2017-11-23 22:07:34 · 256 阅读 · 0 评论 -
多态和多态模型
1:什么多态? 2:多态的对象模型–单继承&多继承? 3:多态的对象模型–菱形继承和菱形虚拟继承?(选做)原创 2017-11-25 18:17:24 · 546 阅读 · 0 评论 -
模板实现顺序表、双链表
1 模板实现顺序表–考虑深层次的深浅拷贝问题 1)顺序表模板实现如下://SeqList.h#pragma once#include<iostream>#include<assert.h>#include"string.h"template<class T>class SeqList{public: SeqList() :_a(NULL) ,原创 2017-11-27 12:41:30 · 155 阅读 · 0 评论 -
容器vector&list
1:vector和list的使用 1)vector vector是一个在堆上建立的一维数组,它拥有一段连续的内存空间,并且起始地址不变,可以快速的访问随机的元素(可以使用[ ]操作符),在末尾插入或者删除元素效率高,但是在序列中间随机的插入、删除元素效率很低。vector因为存储在堆上,所以支持erase( ), resieze()(重新划分容器容量)等操作; vector不用担心越界当空间不够原创 2017-12-20 16:05:10 · 2448 阅读 · 0 评论 -
位图——bitset
typedef struct BitMap { size_t* _bits; size_t _range; }BitMap; void BitMapInit(BitMap* bm, size_t range) void BitMapSet(BitMap* bm, size_t x) void BitMapReset(BitMap* bm, size_t x) // x存在返回0,...原创 2018-09-13 22:34:37 · 501 阅读 · 0 评论