C++
专注C++学习
小贾-同志
每一个不曾起舞的日子都是对生命的辜负
展开
-
【排序算法】 ——— 归并排序总结
文章目录原创 2019-08-07 22:45:42 · 750 阅读 · 0 评论 -
【排序算法】——— 堆排序总结
文章目录原创 2019-08-07 15:33:19 · 950 阅读 · 0 评论 -
【排序算法】——— 希尔排序总结
文章目录原创 2019-08-06 16:30:13 · 1258 阅读 · 0 评论 -
【排序算法】——— 直接插入排序总结
文章目录原创 2019-08-06 16:29:16 · 1337 阅读 · 0 评论 -
【排序算法】——— 简单选择排序总结
文章目录原创 2019-08-06 16:28:43 · 1131 阅读 · 0 评论 -
【排序算法】——— 冒泡排序总结
文章目录原创 2019-08-06 16:28:21 · 1475 阅读 · 0 评论 -
【模板】对于vector容器底层和空间配置器中右值引用的理解(std::move()和std::forwad())
文章目录【1】先简单实现一个空间配置器Allocator【2】自己实现一个简单的vector容器【3】再自己实现了一个简单的string字符容器【4】主函数【5】使用带右值引用参数的函数【6】使用模板再次实现代码优化【1】先简单实现一个空间配置器Allocatortemplate<typename T>struct Allocator{ T* allocate(size_t ...原创 2019-07-31 13:24:55 · 2205 阅读 · 0 评论 -
【高级数据结构】 || AVL树详解(C++)
文章目录什么是AVL树为什么要引出AVL树AVL树的特点AVL树的旋转LLRRLRRLAVL树的结构AVL树的插入AVL树的删除什么是AVL树AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树为什么要引出AVL树AVL树又称平衡的BST树,它能保证二叉树高度相对平衡,尽量降...原创 2019-06-29 15:06:59 · 2081 阅读 · 1 评论 -
【BST二叉搜索树】常见笔试题
文章目录【1】树的镜像翻转【2】判断一棵二叉树是不是一棵BST树【3】寻找BST树指定区间的元素结果集【1】树的镜像翻转 //树的镜像翻转 void mirror() { cout << "镜像翻转:"; mirror(_root); //调用以根节点进行镜像翻转 } void mirror(BSTNode *node) { if (node == nullp...原创 2019-06-05 18:15:28 · 2082 阅读 · 0 评论 -
【二叉树的遍历】前中后序、层序遍历(递归与非递归版本)
文章目录【0】遍历法则层序遍历前序遍历中序遍历后序遍历【1】非递归前序遍历递归版本前序遍历【2】非递归中序遍历递归版本中序遍历【3】非递归后序遍历递归版本后序遍历【4】非递归层序遍历递归版本层序遍历【5】测试代码【0】遍历法则我们来简单了解一下二叉树的前中后序和层序的遍历法则层序遍历层序遍历是最简单的,顾名思义就是一层一层从左往右一个一个打印,不难理解。前序遍历例:输出结果:A...原创 2019-06-03 17:14:05 · 3404 阅读 · 0 评论 -
C++高级数据结构 | 二叉搜索树BST --- (Binary Search Tree)
文章目录什么是BSTBST的排序什么是BST若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉查找树。BST的排序对于已知的二叉查找树的从小到大排序就是他的中序遍历顺序即从根节点开始,若有左子树则递归输出左子树直到叶子结点,再输出自身,再递归输出右子树。如图所示:如图的中序遍历:...原创 2019-05-28 03:14:44 · 2563 阅读 · 0 评论 -
C++设计模式 | Iterator迭代器模式详解
文章目录迭代器模式的含义迭代器模式的基本实现迭代器模式的含义迭代器模式Iterator的核心功能,就是提供了一种特定的方法,顺序访问一个容器中的各个元素,既不会暴露容器的内部设计细节(容器底层数据结构),又可以让外部代码透明的访问集合内部的所有元素。所以迭代器模式的代码中首先有两个成员方法,一个是判断是否存在下一个元素存在(bool hasnext())和取出下一个元素(_Ty& n...转载 2019-05-12 16:14:44 · 1496 阅读 · 0 评论 -
《深入理解C++11》右值引用、移动语义与完美转发
文章目录左值引用什么是右值引用右值引用示例左值引用什么是右值引用右值引用示例原创 2019-05-10 01:45:17 · 2087 阅读 · 1 评论 -
C++设计模式 | 工厂模式之抽象工厂模式详解
文章目录抽象工厂抽象工厂的优点抽象工厂的缺点抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。抽象工厂模式比工厂模式更为复杂,就像上面提到的缺点一样,工厂模式和简单工厂模式要求产品子类必须要是同一类型的,拥有共同的方法,这就限制了产品子类的扩展。于是为了更加方便的扩展,抽象工厂模式就将同一类的产品子类归为一类,让他们继承同一个抽象子类,我们可以把他们一起视作一组,然...原创 2019-05-05 15:48:52 · 2207 阅读 · 0 评论 -
C++设计模式 | 工厂模式之工厂方法模式详解
文章目录工厂方法工厂方法的优点工厂方法的缺点工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。既然每次都要判断,那就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子类只用来生成产品类,只要产品子...原创 2019-05-05 15:45:32 · 1280 阅读 · 0 评论 -
C++设计模式 | Observer 观察者模式详解
文章目录观察者模式介绍观察者模式的动机观察者模式解决什么问题观察者模式的使用场合观察者模式的结构和实现结构实现应用实例代码示例观察者模式介绍观察者模式的动机定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式解决什么问题一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。观察者模式的使用场合在以...原创 2019-05-04 21:05:39 · 2005 阅读 · 0 评论 -
C++设计模式 | 工厂模式之简单工厂模式详解
文章目录设计模式设计模式的原则工厂模式的核心思想【1】简单工厂简单工厂的优点简单工厂的缺点【2】工厂方法工厂方法的优点工厂方法的缺点【3】抽象工厂抽象工厂的优点抽象工厂的缺点设计模式设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式的原则(1)开闭原则(Open Close Principle)...原创 2019-05-03 16:46:53 · 1522 阅读 · 0 评论 -
C++设计模式 | Singleton单例模式线程安全的懒汉模式、饿汉模式
文章目录什么是单例模式?单例模式的应用场景?单例模式的要点?懒汉模式饿汉模式什么是单例模式?单例模式,顾名思义就是一个类只能实例化一个对象,并提供一个访问它的全局访问点,该实例被所有程序模块共享。单例模式的应用场景?因为在设计或开发中,肯定会有这么一种情况,一个类只能有一个对象被创建,如果有多个对象的话,可能会导致状态的混乱和不一致。这种情况下,单例模式是最恰当的解决办法。它有很多种实现方...原创 2019-05-02 16:10:59 · 2727 阅读 · 0 评论 -
C++ || 继承与多态(详细笔记)
文章目录【1】继承继承的本质1.继承的访问限定?2.派生类怎么初始化从基类继承来的成员?3. 构造析构的顺序?4.继承结构是从上到下的结构【2】多态1.什么是多态?2.多态的好处3.重载 隐藏 覆盖(基类和派生类同名成员函数之间的关系)4.请解释静态绑定(编译)(函数调用)和动态绑定(运行)?5.vfptr vftable 什么时候生成?运行时加载到那一块内存??6.RTTI指针7.虚函数表8. ...原创 2019-04-27 16:01:50 · 1217 阅读 · 0 评论 -
C++常见面试简答题 || 指针和引用 / 静态绑定动态绑定 / 多态 / STL常见容器 / 智能指针 / C++11新标准
文章目录1、引用和指针的区别2、解释静态绑定和动态绑定3、解释什么是多态4、请列举你所熟悉的容器并做简要功能描述5、请列举你所熟悉的智能指针并做简要功能描述6、请列举你知道的C++11新标准的语法,并做简要功能描述1、引用和指针的区别A:定义一个引用变量和定义一个指针变量的汇编指令一模一样,区别是引用变量必须要初始化,指针没有强制要求。B:通过应用变量修改内存的值和通过指针修改指向内存的值,...原创 2019-04-27 14:27:45 · 2590 阅读 · 0 评论 -
C++经典面试题 | 迭代器失效问题
STL中迭代器失效的问题 关联性容器的迭代器失效问题 序列性容器的迭代器失效问题 总结: 序列性容器::(vector和list和deque) 关联性容器::(map和set比较常原创 2019-04-23 21:37:30 · 5047 阅读 · 8 评论 -
C++经典面试题 | 带引用计数的智能指针循环交叉引用问题
我们先来看看强智能指针shared_ptr循环引用所带来的问题:class B;class A{public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; } shared_ptr<B> _ptrb;};class B{public:...原创 2019-04-16 23:42:11 · 1688 阅读 · 0 评论 -
C++ | 关联容器set的常用函数操作
#include <iostream>#include <string>#include <set>#include <ostream>#include <iterator>using namespace std;struct strLess{ bool operator() (const char *s1, const...原创 2019-04-15 22:27:37 · 1247 阅读 · 0 评论 -
C++经典面试题 | C和C++的区别是什么?
导语:大家求职简历上肯定会写精通C和C++语言之类的词语,所以,这个问题被问到的概率也是相当高的,请大家提前准备下该怎么表达!解题思路:面试中如果要和面试官谈C和C++的区别这样的问题,那么尽量先从轮廓上谈一些他们大方向上的差别,然后等着面试官再和你仔细的询问某个知识点的细节,切忌一上来就喋喋不休,没个逻辑,想到哪里说到哪里,这样不行,因为它们之间的区别点还是非常多的!针对这个问题,你可以...原创 2019-04-15 14:46:20 · 12289 阅读 · 0 评论 -
C++经典面试题 | malloc和new的区别?
解题思路:(1)malloc和new都是在堆上开辟内存的malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存,还可以进行初始化,如new int(10);表示在堆上开辟了一个4字节的int整形内存,初始值是10,再如new int[10] ();表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0。(2)malloc是函数,开辟内存需要传入字节数,如mal...原创 2019-04-15 14:21:02 · 20180 阅读 · 6 评论 -
C++经典面试题 | new/new[]和delete/delete[]的区别原理
1.先来谈谈new和delete在C++中堆内存的分配和释放是通过new和delete来操作的,它们和C语言的malloc和free有什么区别呢?1)new的底层也是通过malloc来开辟内存的,new比malloc多一项功能,就是开辟完内存,还可以进行初始化操作,如下:int *p = new int(10);上面是new的基本操作,10代表堆上开辟的整形内存的初始值;如果是自定义类类型...原创 2019-04-15 13:58:39 · 7065 阅读 · 1 评论 -
利用C++面向对象OOP思想实现迷宫maze的路径寻找问题(详解加代码)
问题题目:用OOP完成迷宫路径的寻找问题软件运行要求如下:请输入迷宫的行列数: 5 5请输入迷宫路径节点信息(1表示不能走,0表示能走)开始寻找迷宫路径(从左上角到右下角的一个可通行的路径):迷宫存在可通行的路径:程序所包含的头文件和如下#include "targetver.h"#include<iostream>#include<string.h>...原创 2019-04-13 15:42:38 · 2331 阅读 · 0 评论 -
网易笔试题 | C++实现大数的加减法(代码详解)
大数运算-------加法/减法例如:28937697857832167849697653231243+9785645649886874535428765很明显计算机不能直接计算出来这个表达式的值,因为它所能表示的数值的范围是有限的。所以我们要另外想其他的办法,于是乎我们就就想到了用string字符串表示这个数。通过代码我们来详细理解解题的整个思路大整数类#include "std...原创 2019-04-13 01:23:31 · 3255 阅读 · 1 评论 -
利用最大堆和最小堆求海量数据的前n大/前n小/Top k问题
堆的实质其实就是一颗完全二叉树最大堆的特点:父节点值均大于子节点;最小堆的特点:父节点值均小于子节点;找top最大的用小根堆;找top最小的用大根堆...原创 2019-04-11 14:24:42 · 4465 阅读 · 0 评论