
C++
文章平均质量分 58
pointer_y
梦想就是用来实现的。
展开
-
【数据结构】AVL树详解
1.什么是AVL树AVL树又称平衡二叉搜索树,它能保证二叉树高度相对平衡,尽量降低二叉树的高度,提高搜索效率。单纯的二叉搜索树在最坏的情况下插入查找删除等操作时间复杂度会是O(N),例如:所以,AVL树就能避免这种情况,使得增删查改的时间复杂度为O(lgN). (ps:这里的lgN指的是log以2为底的N。)那么AVL树是怎么做到的呢,看看它的特点你就大概知道了:1> 左子原创 2016-11-02 21:41:34 · 9933 阅读 · 2 评论 -
【C++】命名空间
1、为何C++要引入命名空间 命名空间解决一个大的项目中命名冲突的问题,一个大的C项目中,成千上万的函数容易出现重名的问题,导致错误重载或者其他错误,故C++引入命名空间,解决重名和分类的问题。2、如何使用命名空间 命名空间可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义。 标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义原创 2016-08-14 16:23:47 · 314 阅读 · 0 评论 -
【数据结构】浅析B树
一、B树的概念B树,概括来说是一个节点可以拥有多于2个子节点的平衡多叉树。特点:1> 根节点至少有两个子节点2>每个节点有M-1个key原创 2016-11-15 21:36:13 · 1489 阅读 · 0 评论 -
【数据结构】二叉树部分面试题解法
1.问题描述:根据给定的二叉树前序中序遍历结果,重建出这颗二叉树。例如:前序遍历结果:1,2,3,4,5,6。中序遍历结果:3,2,4,1,6,5。2.问题分析:我们知道,前序遍历的顺序是:当前结点,左子树,右子树。那么,前序遍历的第一个数字就是根节点。而中序遍历的顺序是:左子树,当前结点,右子树。所以,对于中序序列来说,根节点的左右分别就是左子树的结点和右子树的结点。故,我的做法是:原创 2016-11-30 22:23:48 · 463 阅读 · 0 评论 -
【小项目】用Huffman树实现文件压缩并解压
一、前言 如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢?如果你没有学习Huffman树,那咱们就一起先学习一下Huffman树吧。二、Huffman树压缩文件定义:Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。建立:原创 2016-11-09 20:55:23 · 14348 阅读 · 8 评论 -
【STL】SGI版STL空间配置器剖析+简单实现
简单认识STLSTL是C++的一个标准库,提供六大组件:容器,算法,迭代器,仿函数,配接器,配置器。这里介绍的就是配置器。它负责空间配置与管理,分为两级,一级空间配置器和二级空间配置器。上一篇博客也提到过,当频繁的申请和释放小块内存空间的时候,会产生外碎片和效率低的问题。所以,STL把空间配置分为两级,大于128字节使用一级空间配置器,一级空间配置器只是简单的对系统的malloc和free做了原创 2016-12-07 17:37:03 · 445 阅读 · 0 评论 -
【C++】强制类型转换
在C语言中我们知道,类型转换有隐式的类型转换和显示的强制类型转换。而C++中提供了一下四个关键字分别用于不同场景下的类型转换。普通的类型转换void TestCommenCast(){ int i = 0; double d = i; //隐式类型转换 printf("%d,%.2f\n", i, d); int*p = &i; int adress = (int)p;原创 2016-12-08 17:59:47 · 356 阅读 · 0 评论 -
【数据结构】几种常见的排序算法
一、排序算法的分类 下图是我掌握的一些排序算法,我将他们做了分类,当然,排序算法远不止这些。本篇博客主要记录插入,选择,以及交换排序的冒泡排序,因为快排和归并算法相对复杂,所以,下一篇博客再细细讲述。二、各种算法的基本思想,分析及其代码实现1.直接插入排序 a>算法思想:假设第一个数是有序的,那么把后面的数拿出来插入到这个有序数的合适位置,假设是升序(比第一原创 2016-11-26 23:06:40 · 8135 阅读 · 0 评论 -
【数据结构】快速排序
一、快排的几种实现方法1.左右指针法a>算法思想:选定数组的最后一个数作为关键值(key),从左边开始遍历找比key大的,从右边找比key小的,找到后交换左右指针,让比key大的数据向后调,比key小的数据调到前面,等到左右指针相等的时候,把数组的最后一位和指针所指位置交换,这样一趟排序过后,key值的前面都是比它小的数,后面都比它大。此时key相当于划分了它左右两个区间,那么两个区间再次原创 2016-11-27 15:12:01 · 1112 阅读 · 0 评论 -
如何用gdb调试以daemon进程运行的服务
小项目的调试,基本是在编译时加-g选项后,使用gdb可以直接调试。gdb 目标二进制文件名eg:gdb hello但是大多数服务端程序是以daemon进程形式运行的,demon进程详解见:点我点我这种服务直接gdb是不行的,需要加参数-p 加目标程序端口号。开始调试之前运行ps -x,查看目标程序的PID。gdb -p PID打断点的方法也有点差异,工程较大的时候,打断点方法:b 类型::方法名...原创 2018-04-16 21:28:18 · 2176 阅读 · 0 评论 -
《More Effective C++》读书笔记
1、指针和引用的使用场景确定变量永远不会为空且不会作为其他变量的代表时用引用;变量有可能会为空或者在不同的时间会指向不同的对象时用指针。2、类型装换最好使用C++转型操作符static_cast 基本类型之间的转换const_cast 常量转非常量(去除常量属性)dynamic_cast 继承体系中父类与子类之间的安全转型,失败返回NULLreinterpret_ca...原创 2018-12-21 16:10:18 · 232 阅读 · 0 评论 -
【openssl】使用openssl库进行base64加解密,aes解密,rsa验证签名
一、前言 近期在处理http请求的时候接触到了有关加密解密的部分,因为之前几乎没碰过这方面,遇到了很多坑,所以记录一下解决过程,用到的加密解密函数都是来自openssl库。openssl库包含主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议。二、base64加密解密2.1 base64编码  ...原创 2019-07-02 12:40:27 · 2499 阅读 · 0 评论 -
【C++】 引用学习
1.什么是引用 引用是为对象起的另外一个名字,定义的格式为: 类型 &引用变量名 = 已定义过的变量名。例如:int a=10;int &b=a; //b是a的引用2.引用的特点 1>一个变量可取多个别名 2> 引用必须初始化 3>引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。 定义引用时,程序会把引用的它的初始值绑定在一起,一旦初原创 2016-08-14 18:08:51 · 311 阅读 · 0 评论 -
【C++】实现万年历
1.此万年历功能1>日期加减天数2>日期与日期之间的差值3>输入年月显示当月日历2.代码实现#include#includeusing namespace std;class Date{public: Date(int year = 1990, int month = 1, int day = 1) //构造函数 :_year(year), _month(m原创 2016-08-18 19:44:01 · 5575 阅读 · 0 评论 -
【数据结构】二叉搜索树的递归与非递归实现
一.什么是二叉搜索树1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。4. 左右子树都是二叉搜索树。二.二叉搜索树的代码实现(这里我们主要关心增删查改)#pragma onceusing原创 2016-10-25 19:41:23 · 539 阅读 · 0 评论 -
【数据结构】堆,堆实现优先级队列,堆排序
1.什么是堆?堆是一种数据结构,底层是一种数组对象,它可以被视为一棵完全二叉树结构 最大堆:每个父节点的都大于孩子节点; 最小堆:每个父节点的都小于孩子节点。2.堆数据结构二叉树存储。如图所示是个大堆,只能保证父节点比孩子节点大。所以下标为0是整个堆最大的,但无法确定下标为1,2的数据哪个更大3.堆数据结构和优先级队列的代码实现思想:从第一个非孩子节点的下标开始原创 2016-10-11 21:08:44 · 755 阅读 · 0 评论 -
【数据结构】中序线索化二叉树后实现一个迭代器来遍历二叉树
1.创建二叉树的结点#pragma once#include#includeusing namespace std;enum PointerTag{ THREND, LINK,};templatestruct BinaryTreeThdNode{ typedef BinaryTreeThdNode Node; BinaryTreeThdNode(T data) :原创 2016-10-10 09:22:21 · 646 阅读 · 0 评论 -
【数据结构】二叉树的递归与非递归创建和遍历
下面代码所用到的测试用例画成树的样子长这样:创建树时给的是数组,用‘#’代表非法值,即该结点为空。二叉树的递归实现:#pragma once#include#includeusing namespace std;templatestruct BinaryTreeNode{ BinaryTreeNode(T value=0) :_value(value), _l原创 2016-10-05 17:04:15 · 507 阅读 · 0 评论 -
【STL】 vector 模拟实现
上一篇博客说了一下list的使用,其实vector用法基本上和list是一样的,所以此篇博客就只模拟实现以下vector。vector你可以把它理解成一个顺序表或者数组。只是STL里的vector是由三个迭代器来维护的:_start(数据存放开始的位置),_finish(数据存放结束位置的下一个),_endofstorage(容量的最后一个位置)。vector里的迭代器其实就是个指针。来看看代码实原创 2016-09-23 19:55:07 · 2095 阅读 · 2 评论 -
【STL】list的应用和模拟实现
1.认识STL STL(标准模板库)是C++标准库的重要组成部分,共六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器。此篇博客主要讲容器里的list的应用和简化版的模拟实现。2.list的相关应用 list可以说是我们平常所写的链表,但是不完全相同,库里的list是一个用模板实现的双向循环链表。除此之外还包括迭代器的一些操作。我们先来看看list它都包含些什么:原创 2016-09-16 19:28:55 · 983 阅读 · 0 评论 -
【C++】学习、复习知识框架
近期对C++的知识体系做了一个总结,希望以后在复习C++时可以用到,分享给大家~原创 2016-09-08 10:24:36 · 631 阅读 · 0 评论 -
【C++】模板类链表
上一篇博客介绍了模板类顺序表,此篇博客主要是模板类链表的实现。#pragma once#include#includeusing namespace std;templatestruct Node{public: Node(const T&x) :_data(x), _next(NULL), _prev(NULL) {} T _data; Node*_next;原创 2016-09-01 17:13:01 · 521 阅读 · 0 评论 -
【C++】模板类顺序表
1.什么是模板 模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。如果我们写一个普通的顺序表,那它只能满足一种数据存储类型,之后如果想把这个顺序表改成其他数据类型的顺序表,那就必须得改代码了,感觉很麻烦,还容易出错。所以,写一个模板类顺序表,在构建顺序表的时候把数据类型传过去,这样,顺序表存储的数据类型我们想传个什么就能构建什么数据类型的顺序表。是不是很方原创 2016-08-29 09:01:23 · 3746 阅读 · 0 评论 -
【C++】模拟实现string类(版本二:用写时拷贝来实现)
1.什么是写时拷贝 介绍写时拷贝之前,我们得先了解一下深浅拷贝,浅拷贝简单来说就是:只是对指针的拷贝,拷贝后和原来的指针指向同一块空间,如图: 所以,浅拷贝其实存在很多问题: 1.由于都指向同一块空间,所以,一旦其中一个对其内容做了更改,则所有对象都会发生变化,显然这并不是我们想要的。 2.很容易造成同一块空间被释放两次,因为都指向原创 2016-08-21 11:29:17 · 403 阅读 · 0 评论 -
【C++】面试题:模拟实现string类(版本一:用深度拷贝来实现 )
在学习C++时,我们发现string这个类功能很强大,所以我们模拟实现以下它,虽然不能像库函数里实现的那么强大和完美,但是有助于我们更加熟悉的使用string。此篇博客我将用深度拷贝来实现。这里深度拷贝简单来说就是除了拷贝对象的值以外,若对象有其所指向的一块空间,则同时为新创建的对象也开辟一块空间,再拷贝内容。除了深度拷贝,写时拷贝也能实现string类,并且写时拷贝更加高效,写时拷贝具体是什么,原创 2016-08-20 22:37:42 · 503 阅读 · 0 评论 -
【C++11】std::bind,std::function,std::placeholders
此篇博客主要包含三个C++11的新特性。可用于绑定接收到其他进程消息后的消息处理函数。一、std::function 使用时需要包含头文件functional。在实际工作中可实现函数回调,std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式(也是C++11的特性)、函数...原创 2019-06-24 12:31:19 · 538 阅读 · 1 评论