
C++从入门到懵懂
牛小可
人长的不错,发的帖更不错
展开
-
C++构建堆结构
堆是一种数据结构,本质上是数组,可以被视为一个完全二叉树结构。其又可以分为大堆和小堆。 大堆:每个父节点都大于孩子节点。 小堆:每个父节点都小于孩子节点。 以下由C++构成一个堆。#include<vector>#include<assert.h>#include<iostream>using namespace std;template<class T>struct Less{原创 2017-10-02 19:20:09 · 1704 阅读 · 0 评论 -
C++实现日期类
-------------------------------------------------------------------------- /* **功能:实现日期的简单操作 ** ** **基本的成员函数: ** 构造函数,拷贝构造函数,析构函数,赋...原创 2018-03-20 10:30:46 · 182 阅读 · 0 评论 -
深入浅出 String类
当一个类的成员对象是一个指针对象时,进行简单赋值的浅拷贝,会将两个对象指向同一块内存,这样在析构时同一块内存就会析构两次,引发奔溃。 所以在进行指针对象的赋值时要深拷贝。 下面我来模拟实现以下深拷贝。class String{ public: String(const char* str = "") :_str(new char[strlen(...原创 2018-04-08 17:16:05 · 212 阅读 · 0 评论 -
C++对传参和传返回值时构造的N中优化处理
系统在什么情况在会进行优化呢?1. 当拷贝构造存在连续赋值的情况的时候2. 当多个临时对象连续赋值的时候,【简单来说就是就是,再一次拷贝构造结束后,并没有直接返回要创建的对象,而是再一次进行了拷贝构造,或者建立一个临时对象,来进行拷贝构造,然后又返回一个临时对象,在用这个返回的临时对象继续拷贝构造,这是就会优化】3. 匿名对象的优化。再有临时变量的地方,拷贝会优化,超出一个表...原创 2018-04-06 22:00:59 · 198 阅读 · 0 评论 -
AVL树详解
先来总结一下排序二叉树: 二叉排序树是以链接的方式存储,保持了链接存储结构在执行插入和删除操作时不用一定元素的优点,只要找到合适的插入和删除位置后,仅需修改链接指针即可,插入删除的性能比较好,而对于二叉排序树的查找,走的就是根节点到查找节点的路径,其比较次数等于给定的节点在二叉排序书的层数,极端情况最少为一,最多也不会超过树的深度,也就是说二叉排序树的查找性能取决于二叉排序树的形状,问...原创 2018-05-02 10:31:13 · 286 阅读 · 0 评论 -
函数模板
本文就来简述一下函数模板的基本使用. 一、函数模板格式template<typename Param1, typename Param2,...,class Paramn>返回值类型 函数名(参数列表){ ...} 二、函数模板的实例//T表示类型,具体是什么不知道,实例化的时候才知道//typename可以用class代替,但推荐使用ty...原创 2018-04-28 18:30:46 · 186 阅读 · 0 评论 -
google-cpp-guide
这是我从github上淘来的,感觉就是那本事的心得笔记。原创 2018-06-03 12:13:02 · 539 阅读 · 0 评论 -
快速排序
快速排序:一、快速排序的简介快速排序是一种总体上来讲时间复杂度较低的排序,其主要利用了分冶的思想;在排序一大段数据时,每次通过选取key值, 然后利用不同的方法将该段数据分为两段(小于等于key的一段在一边,大于key的一段在一边,key的数据在这两段的中间); 然后通过递归的方法分别对上述的左右两段数据采用同样的思想分段;快速排序每一趟下来,位于两段中间的key值就会被置 于最...原创 2018-06-03 17:24:35 · 1251 阅读 · 0 评论 -
归并排序
一、归并排序的思想 归并排序利用了分冶的思想,将一块待排序的区间,取中间位置,分成两段区间;然后通过不断的递归,直到每段区间只有一个数字,这时我们就认为该段区间有序,然后将这相邻的两段有序区间合并为一个有序区间; 这样通过递归先分裂数组,然后再合并数组,就完成了归并排序;二,实例代码//归并排序 void _MergeSort(int* a,int left,int ...原创 2018-06-03 19:59:08 · 294 阅读 · 0 评论 -
插入排序
插入排序:直接插入排序和希尔排序插入排序原理: 将数据分为两部分,有序部分和无序部分,一开始有序部分包含第一个 元素,依次将无序的元素插入到有序部分,知道所有元素有序。插入排序 又分为直接插入排序,二分插入排序,链表插入等。我们只讨论直接插入排序, 他是稳定的排序算法,时间复杂度是(n^2). 有序时。不需要交换,比较N次,当时逆序时,比较次数最大,下标为 i的...原创 2018-06-04 11:17:19 · 178 阅读 · 0 评论 -
非比较排序
§1 计数排序(Counting Sort)计数排序(Counting sort)计数排序(Counting sort)是一种稳定的排序算法,和基数排序一样都是桶排序的变体。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值小于等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。计数排序的原理设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,...原创 2018-06-04 17:23:53 · 234 阅读 · 0 评论 -
利用next_permutation()生成排列与组合
先来复习一下排列组合的知识。 排列组合(组合数学中的一种)permutation and combination 排列的定义及其计算公式 排列有两种定义,但计算方法只有一种,凡是符合这两种定义的都用这种方法计算。 定义的前提条件是m≦n,m与n均为自然数。 ① 从n个不同元素中,任取m个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列。...原创 2018-07-06 14:27:13 · 926 阅读 · 0 评论 -
c++堆的实现
大堆 小对原创 2017-09-28 22:47:42 · 478 阅读 · 0 评论 -
二叉树的线索化
为了解决快速便利原创 2017-09-28 22:46:44 · 184 阅读 · 0 评论 -
C++类和对象
1:整理类和对象的基础知识,如类的定义,访问限定符,面向对象封装性,对象的大小计算等等。 2:整理四个默认成员函数及运算符重载相关知识 3:整理隐含的this指针等等,及对运算符重载背后做的事情。首先先来认识几个默认的成员函数,为此我们先定义一个日期类。class Date{public: void Display() { cout<<_year<<":"<<_mont原创 2017-07-15 22:01:32 · 510 阅读 · 0 评论 -
C/C++动态内存管理之calloc ,malloc,realloc的区别
C语言的内存分配方式<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.<3>从堆上分配,亦称动态内存原创 2017-07-20 09:50:13 · 263 阅读 · 0 评论 -
C/C++动态内存分配
C++通过new 和 delete 进行动态内存管理。 new 和 delete 进行动态管理对象。 new[] 和 delete[] 进行动态管理对象数组。 void test(){ int * p1 = new int; //动态分配四个字节(1个int)的空间单个数据 int * p2 = new int (2); //动态分配四个字节(1个int)的空间并初始化为原创 2017-07-20 22:11:57 · 240 阅读 · 0 评论 -
C++继承与多态
1:分析菱形继承的问题。 2:剖析虚继承是怎么解决二义性和数据冗余的首先,我们先来看一个菱形继承的程序。#include<iostream>using namespace std;class Person{public:string _name;};class Student : public Person{protected:string _id;}class Teacher原创 2017-07-21 17:45:58 · 399 阅读 · 0 评论 -
###震惊 **C++竟然不支持模板的分离编译**
在一个编译单元里,我们假设有三个文件,test.h test.cpp main.cpp。test.h文件里装有各个函数的声明,而实现在test.cpp中,main.cpp中实例化函数。当编译器将一个工程里的所有.cpp文件以分离的方式编译完毕后,再由连接器(linker)进行连接成为一个.exe文件。test.hvoid FUNC();===========================原创 2017-08-04 17:24:42 · 279 阅读 · 0 评论 -
浅谈c++智能指针
所谓的智能指针就是智能/自动化的管理指针所指向的动态资源的释放。 智能指针的产生是由于C++没有内存的自动回收机制,每次new出来的空间都需要收到的delete,而在个别情况下,总是无法及时的delete,或者异常导致程序提早退出,造成内存泄漏。于是弥补上述不足的智能指针应用而生。 智能指针的发展可分为三个阶段 (1)auto_ptr c++98 (2)scoped_pt原创 2017-08-04 20:46:34 · 370 阅读 · 0 评论 -
深度探索C++模型
C++对象模型之多态所谓的多态,其实就是多种形态,简单地说当使用父类的指针/引用调用重写的虚函数,当父类的指针/引用指向父类的对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。虚函数–类的成员函数前面加virtual关键字,则这个成员函数称为虚函数。虚函数的重写–当在子类定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(覆盖)了父类的这个虚函原创 2017-07-27 20:33:07 · 487 阅读 · 0 评论 -
熟能生巧vector
vector(向量):C++的一种数据结构,确切的说是一个类,它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模有多大时,用其来解决问题可以达到最大节省空间的目的。 用法: 1.文件包含: 首先在程序的开头处加上#include(注意没有.h)以包含所需的文件的vector,还要加上命名空间using namespace std; 2.变量声明: 例如:声明一个int向量以替代一原创 2017-09-05 20:31:49 · 241 阅读 · 0 评论 -
熟能生巧vector
vector(向量):C++的一种数据结构,确切的说是一个类,它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模有多大时,用其来解决问题可以达到最大节省空间的目的。用法:1.文件包含:首先在程序的开头处加上#include(注意没有.h)以包含所需的文件的vector,还要加上命名空间using namespace std;2.变量声明:例如:声明一个int向量以替代原创 2017-09-05 20:36:29 · 246 阅读 · 0 评论 -
文章标题
关于模板的非类型形参,网上有很多内容,C++primer只有大概一页的阐述,但是都不够清晰详细。下面我尽可能从自己的角度去给大家描述一下非类型形参的相关细节。如果想进一步理解非类型形参以及模板内容可以阅读C++template这本书,在4.1节,8.3.3节,13.2节都有相关解释。 模板除了定义类型参数,我们还可以在模板定义非类型参数。什么是非类型形参?顾名思义,就是表示一个固定类型的常量而不是一转载 2017-09-07 15:25:33 · 187 阅读 · 0 评论 -
vector使用技巧
大家都知道原创 2017-09-28 22:43:38 · 326 阅读 · 0 评论 -
C++实现二叉树
二叉树的内容原创 2017-09-28 22:45:32 · 238 阅读 · 0 评论 -
C++初次告白
今天初次接触了C++,听说挺难得,我虔诚的心又颤抖了一下,不知为什么,我总是后知后觉,比别人慢半拍,有时也很担心,比那些有天赋的人差的好像很远,可是只要自己不断地努力就可以挽救一些吧,希望自己可以 把他当一个朋友一样去深深的交流,互相发现对方的特点,佳佳 让我们交往吧。让你融入我的心里。第一次交往的经历: (1)命名空间 using namespace 你有那么的内存,却从来不曾凌乱,你把每原创 2017-06-18 17:47:38 · 3217 阅读 · 0 评论