自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 AVL树

AVL树全称高度平衡二叉树,它是一种优化了的搜索二叉树。我们知道,由于搜索二叉树存在缺陷,有可能退化成单链,这样的话搜索效率就降低了。为了将二叉搜索树的效率控制在O(logN),所以对二叉搜索树加上一些条件,使得二叉搜索树高度平衡,时间复杂度为O(log N).一   定义:           1.首先AVL树是一个二叉搜索树           2.它的左子树,右子数都是AVL树       ...

2018-03-28 13:13:25 864

原创 二叉搜索树

话不多说,直接上代码。#include<iostream>#include<stdlib.h>using namespace std;template <class K>struct BSTreeNode{ BSTreeNode<K>* _left; BSTreeNode<K>*_right; K _key; BSTre...

2018-03-25 23:54:59 138

原创 二叉树的创建以及递归非递归遍历

#pragma once#include<iostream>#include<stdlib.h>#include<assert.h>#include<stack>#include<queue>using namespace std;template<class T>struct BinTreeNode{ T...

2018-03-25 23:46:54 247

原创 STLvector中reserve()和resize()区别

一   STL中resize()函数的作用是改变vector元素个数      resize(n,m)第二个参数可以省略      n代表改变元素个数为n,m代表初始化为m .主要有三层含义:1.如果n比vector容器的size小,结果是size减小到n,然后删除n之后的数据。2.如果n比vector容器的size大比容器的capacity小,结果是增加size,并初始化----如果指定了,初始...

2018-03-17 13:43:14 3175

原创 shared_ptr循环引用问题与仿函数实现定制删除器

一    shared_ptr的循环引用问题一:智能指针发展历史智能指针发展历史:二:shared_ptr中的循环引用问题我们前面博客都已经了解了shared_ptr是采用引用计数的方式进行,但是它存在一个问题,就是循环引用,通过底下例子我们来详细看看。struct ListNode{ int _data; ListNode* _next; ListNode* _prev; ~ListN...

2018-03-16 20:45:54 224

原创 模拟实现STL中list(用迭代器)

在上一篇博客中有很详细的介绍迭代器的用法。点击打开链接STL中list底层其实是带头双向循环列表,STL中使用迭代器(iterator)指向list的结点,并进行增删查改等操作,本篇我们模拟STL中list的常用操作。先来构造list中的结点template<class T>struct My_ListNode{ T _date; My_ListNode<T>* _...

2018-03-14 23:17:00 338

原创 迭代器 ------------如何使用迭代器(list)

一   引出迭代器:了解容器list ,就应该先会用容器list.首先我们要知道list,其实就是一个用模板实现的双向带头循环列表。肯定会有同学有疑问,那既然是个双向带头循环链表,那为什莫要用STL中容器list,#pragma once#include<iostream>using namespace std;#include<list>void test_lis...

2018-03-13 17:11:13 4167

原创 时间复杂度&空间复杂度

一  :时间复杂度:实际上就是函数,这个函数计算基本操作执行的次数。          ps:这里的函数指的就是数学里面的函数,而不是C语言里面的函数。思考:可能会有人问,时间复杂度,那为什么不算程序运行的时间呢?原因是:程序运行的时间,跟环境有关,机器的性能等。同一个程序在不同机器下运行时间不同。1. 算法分析分类:(1 )最坏情况:任意输入规模的最大运行时间(上界)(2)平均情况:任意输入规模...

2018-03-12 23:52:23 446

原创 类型萃取

在C++中我们可以通过typeid来获取一个类型的名称(内置类型和自定义类型都可以)但是我们不能用这种方式获取来的名称做变量的声明。这就用到了类型萃取。例如:我们在Seqlist中要用到类型萃取,因为内置类型我们可以通过memmove进行拷贝,例如string类我们要通过赋值的方式进行拷贝。类型萃取原理:在模板的基础上区分内置类型和其他类型,主要原理是将内置类型全部特化,然后再进行区分

2018-03-09 19:13:22 215

原创 C++模板的特化(函数模板特化,类模板特化)与实例化区别联系

一:实例化什么是实例化:一个通过使用具体值替换模板参数,从模板产生的普通类,函数的过程1.显示实例化:通过指定的类型,表明要实例化的类型2.隐式实例化:通过编译器自己推演,判断出要实例化的类型 二 :特化=具体化类模板特化类模板template<class T1,class T2>class Date{public:Date(){ cout << "Dat...

2018-03-09 14:41:43 2020

原创 模板

一 :概念:模板是泛型编程的基础,所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式,模板分为模板函数和模板类二:模板函数1:模板函数格式: 2:模板函数的实例化<1>.隐式实例化------》推演为实例化一个步骤,推演形参类型<2>显示实例化三:模板类1:模板类格式:2:模板的模板参数------容器适配器,在上一篇博客中有四 : 非类型模板参数对于函数模板和类模...

2018-03-09 09:18:53 215

原创 智能指针底层简单剖析

很多人都误以为智能指针是一个指针,其实不是,智能指针不是指针,智能指针是一个模板类,由智能指针实例化出来的对象具有和常规指针相似的行为,但是他能够自动的释放所指向的对象,所以称之为智能指针,如果我们用普通指针来创建一个指向某个对象的指针,那么我们最后必须要手动释放这块空间,而智能指针它是一个类,它释放空间通过析构函数完成的,正是因为这一层封装机制,所以智能指针才能够管理一个对象的生命周期。一 :R...

2018-03-07 15:25:17 473

原创 如何不用加法,实现两个数相加

首先我们先看5和7相加。a           5 二进制         101   b         17 二进制     10001a+b      22二进制     10100第一步:让a^b得到 10100    与a+b答案相比没有算进位第二步:让a&b得到 00001       (a&b)记录进位                              

2018-03-05 21:15:18 1558

原创 适配器适配栈和队列

适配器:其他容器转换适配出来,此篇博客就是用双向链表和顺序表适配出栈和队列Queue.h#pragma onceusing namespace std;#include"List.h"#include"SeqList.h"template class Queue{public: void Push(const T&x) { _con.PushBack(x); }

2018-03-05 20:18:54 206

原创 模板实现双向循环链表

List.h#pragma once#include<iostream>using namespace std;#include<assert.h>//template <class T>//struct ListNode//{//// T _data;// ListNode<T> *_prev;//注意ListNode<T...

2018-03-03 22:58:21 175

原创 模板实现顺序表

一   :SeqList.h#pragma once#include<iostream>#include<assert.h>#include <string>using namespace std;template <class T>class SeqList{public: SeqList() :_a(NULL) , _...

2018-03-03 15:09:20 213

原创 将"i am a student"转换成" student a am i"

整体思路:1.先将整个字符串逆序                  2.再将整个单词逆序void Reverse_word(char *left,char *right){ assert(left); assert(right); while (left < right) { char tmp = *left; *left = *right; *right = tmp

2018-03-02 11:32:18 2748

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除