
C++
文章平均质量分 80
mac_timmy
这个作者很懒,什么都没留下…
展开
-
基础C++知识点
C++的小结,包括命名空间,重载,指针和引用原创 2017-09-23 17:30:56 · 348 阅读 · 0 评论 -
浅读《STL源码剖析》笔记 4章-vector&&list
个人博客传送门4 序列式容器4.1 容器的概观与分类 所谓序列式容器,其中的元素都是可序的(ordered),但未必有序(sorted)。C++本身有array,其它是STL提供的。4.2 vector4.2.1 vector概述array是静态的,vector是动态增长的,随着元素的增加,内部机制自动扩充空间以容纳元素,不需要自己分配空间。4.2.3...原创 2018-02-09 14:55:32 · 233 阅读 · 0 评论 -
浅读《STL源码剖析》笔记 3章
个人博客传送门3 迭代器(iterator)概念与traits编程技法迭代器(iterator)是一种抽象的设计概念,iterator模式定义如下;提供一种方法,使之能够按照次序访问某个聚合物(容器)所含有的各个元素,而同时又无需暴露该聚合物的内部表述方式3.1 迭代器设计思维STL的中心是将数据容器和算法分开,然后用一个胶合剂将他们联系在一起,这个就是iterators的作用...原创 2018-02-08 17:16:17 · 390 阅读 · 0 评论 -
浅读《STL源码剖析》笔记 1、2章
个人博客传送门1 STL概论与版本简介1.2 STL六大组件容器(containers):vector,list,deque,set,map,用来存放数据算法(algorithms):sort,search,copy,erase迭代器(iterators):扮演容器与算法之间的胶合剂,所谓的“泛型指针”。从实现角度来看,迭代器器将operator*,operator++,op...原创 2018-02-03 11:26:12 · 535 阅读 · 0 评论 -
C++模板与分离编译
个人博客传送门分离编译模式一个项目如果有多个源文件组成,每个源文件单独编译,形成目标文件。最后通过链接器将所有的目标文件链接起来,形成一个可执行的文件。这个过程就叫做分离编译。模板不能分离编译有一个项目,其中函数声明放在”test.h”中,函数实现放在”test.cpp”中,函数调用放在”main.cpp”中。如果没用使用模板,将不会有任何问题。而且这样是被推荐使用的。但是如果...原创 2018-02-24 22:54:33 · 380 阅读 · 0 评论 -
二叉树的基本实现
个人博客传送门二叉树本文将使用c++实现模板类的二叉树,内容包括创建、递归遍历、非递归遍历、结点个数、深度、叶子结点的个数、第K层结点个数等函数。结点、二叉树结构二叉树的结点是一个结构体,包括值_data,指向左子树的指针和指向右子树的指针_left和_right。还有构造函数,用于创建结点。 将BinaryTreeNode<T>typedef为Node,很多...原创 2018-03-06 15:41:31 · 316 阅读 · 0 评论 -
二叉搜索树插入和删除(递归和非递归实现)
个人博客传送门性质节点插入思路图示代码实现查找代码实现删除删除思路第一类,叶子节点或者有一个子树为空左子树为空右子树为空注意第二类,两个子树都存在代码实现中序遍历代码实现完整代码性质二叉搜索树是一个优化的二叉树,也称作二叉排序树、二叉查找树、BST等。一般在每个节点定义一个关键值Key。插入的时候按...原创 2018-04-02 15:17:10 · 851 阅读 · 1 评论 -
堆的解析和实现
个人博客传送门定义最大堆和最小堆完全二叉树用vector表示构造堆并调整空构造函数传参的构造函数reserve()函数的使用Adjustdown函数仿函数Adjustdown函数(一次向下调整函数),本文用最大堆来讲解小技巧补充插入函数Push函数AdjustUp函数(向上调整函数)出堆函数判空,大小,堆顶元素完整代码...原创 2018-04-02 20:47:39 · 632 阅读 · 0 评论 -
基于HuffmanTree的文件压缩及解压
个人博客传送门HuffmanTree定义名词解释性质创建HuffmanTree节点定义构造函数参数解释构建的思想析构函数获取根节点函数补充文件压缩及解压缩哈夫曼编码压缩思路压缩原理压缩与解压代码分析结构体分析构造函数压缩函数构建哈夫曼编码函数解压函数代码HuffmanTree定义哈弗曼树是一种...原创 2018-04-05 14:21:48 · 943 阅读 · 2 评论 -
vector二维数组中的查找
个人博客传送门题目:解题思路:代码:vector构成的二维数组创建二维数组赋值遍历二维数组输出图示:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:第一行到最后一行是递增,第一列到最后一列是递增,那么...原创 2018-04-19 08:56:20 · 3103 阅读 · 0 评论 -
在旋转数组中找最小的值
个人博客传送门题目描述思路注意代码题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个 非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路本题最简单的做法就是从头到...原创 2018-04-19 09:34:10 · 340 阅读 · 0 评论 -
C++模板的类型萃取
个人博客传送门 类型萃取,是C++中的一种编程技术。当我们希望对模板传递的不同类型进行不同的操作的时候,同时我们又不希望改变该模板的封装方式。我们可以通过这种技术,对传入的不同类型进行不同的原理操作。特化要明白类型萃取,首先要知道模板中的特化。一般来说,我们的模板是通用类型的,但是如果有一些类型,我们希望有不同的操作方式,我们就可以通过特化的方式。例子如下:#include &l...原创 2018-02-24 17:25:36 · 491 阅读 · 0 评论 -
判断元素的入栈和出栈顺序是否合法
个人博客传送门题目提供两个元素的集合,一个是元素入栈的顺序,另一个是元素出栈的顺序。设计一个函数,判断两个元素集合是否满足入栈出栈的规则。如:入栈顺序:“12345”,出栈顺序是:“54321”,这样就是符合要求的。如果出栈顺序是:“51234”,这样不符合要求。思路根据题目的要求,就是判断两数组是否满足出栈入栈的顺序。可以这样做:1、先按照入栈顺序的集合进行入栈。2、在入...原创 2018-03-07 15:45:26 · 998 阅读 · 0 评论 -
C++对传参和传返回值的优化
编译器对传参和返回值的优化c++原创 2017-11-28 20:32:56 · 473 阅读 · 0 评论 -
C++默认成员函数、this指针
四个默认成员函数、隐藏的this指针原创 2017-11-04 21:51:02 · 648 阅读 · 0 评论 -
C++ String类的引用计数的浅拷贝、写时拷贝
引用计数的浅拷贝写时拷贝原创 2017-12-09 22:03:06 · 499 阅读 · 0 评论 -
C++菱形继承和虚继承
菱形继承、虚继承、虚基表原创 2017-12-10 16:03:08 · 499 阅读 · 0 评论 -
C++中new/delete剖析及其宏模拟
new/delete/new[]/delete[]的剖析及其模拟原创 2017-12-07 00:59:15 · 769 阅读 · 1 评论 -
C++继承中虚函数和多态
继承体系中虚函数、重写、多态纯虚函数原创 2018-01-13 11:42:36 · 305 阅读 · 0 评论 -
创建一个不能被继承的类并能够正常使用
个人博客传送门题目:题目很简单,就是创建一个不能够被继承的类,同时能够正常使用。思路:题目分为两部分组成,第一个是不能被继承的类。类如果要不能被继承,那么子类肯定不能够调用基类的构造函数或者析构函数。那么我们只要将构造函数或析构函数定义为私有成员函数就好了。第二个要求,能够正常使用,这样显然之前的方式是行不通的。构造函数为私有了,就无法创建对象了。那我再给他加一个友元函数,...原创 2018-01-29 11:36:10 · 408 阅读 · 0 评论 -
1+2+……+n的特殊求法
个人博客传送门 参考来源题目:求1+2+3+…+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句。自己思考想到了一种方法,递归的思路,但是判断终止的条件不是if,利用了&&的性质,当前操作数为假的时候,不再进行后操作数的运算。然后在网上查阅,得到了其他的做法。1、利用&&操作符,|| 也...原创 2018-01-27 18:10:14 · 861 阅读 · 0 评论 -
C++中static const integral data member在类中的初始化
个人博客传送门 1. 当我们在类中定义了一个静态成员变量的时候,我们需要在类之外初始化它,因为他是属于所有的类的。该类的其它对象对这个静态变量也是可以进行修改的。```c++//非常量静态成员变量初始化对比#include <iostream>using namespace std;class person{ public: static int...原创 2018-01-30 14:47:57 · 336 阅读 · 0 评论 -
四种智能指针剖析
个人博客传送门 智能指针是C++中一个编程技巧。它保证内存的正确释放,解决了内存泄漏的问题。有一个思想叫做RAII,RAII指的是资源分配即初始化。我们通常会定义一个类来封装资源的分配和释放,在构造函数中完成资源的分配和初始化,在析构函数中完成资源的清理。 在C++中,我们一般是使用new和delete来实现内存的初始化和释放。正确的配对使用可以处理绝大部分问题,但是如果出现了执行流的跳转,比...原创 2018-02-26 15:56:44 · 263 阅读 · 0 评论 -
经典排序算法
个人博客传送门 排序的分类有很多种,有很多的排序方法,这里只列举了七八种常见的排序算法。 交换排序冒泡排序冒泡排序的思路(升序):比较相邻的两个元素,如果第一个比第二个元素值要大,交换两者位置。指向第二个元素。一趟比较下来,最大的元素应该位于序列的最尾端进行下一趟比较,此时就不需要将最大的元素纳入范围,因为它已经在适合的位置了。重复直到全部完成。如图: ...原创 2018-07-16 22:16:08 · 252 阅读 · 0 评论