![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 92
It‘s so simple
这个作者很懒,什么都没留下…
展开
-
单例设计模式(懒汉模式、饿汉模式)
目录1 设计一个类,只能在堆上开辟空间2 设计一个类,只能在栈上开辟空间2. 设计一个类,只能创建一个对象(单例模式)1 设计一个类,只能在堆上开辟空间在正常情况下,用类实例化出的对象,都会调动它的构造函数,构造函数会在栈上申请一份空间用来存储该对象的成员变量,但是现在规定该类只能在堆上开辟空间,对应的解决方案就是将该类的构造函数声明为私有的(private),为了能正常的获取到该类在堆上产生的对象,我们可以定义一个静态的方法,用来返回在堆上创建的对象。将该类的构造和拷贝构造函数声明为私有,防止别原创 2021-07-23 11:13:53 · 280 阅读 · 1 评论 -
文件海中一束光(文件快速搜索)
目录项目开发背景项目开发背景windows下文件夹框下的默认搜索是搜索时再进行暴力遍历查找,非常的慢,通常我们在windows下要查找一个文件需要花费大量的时间,尤其是当我们不知道具体的文件名时,只知道大概的、模糊的名称时,它的搜索速度会非常的慢。如下:而在Linux环境下则有非常好用的find命令就可以快速的对当前想搜索的文件进行定位。那么windows环境下能快速对文件进行检索吗?答案肯定是有的,也是我们大多数人都爱用的神器:everything,它是将文档信息检索以后,提前存储到原创 2021-07-22 21:56:35 · 897 阅读 · 3 评论 -
二叉搜索树(BST)的具体实现
目录1. BST树概念2. BST接口的实现2.1 寻找BST树中的结点(Search)1. BST树概念二叉搜索树又称二叉排序树,它或者是一颗空树,或者具有以下的性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。它的左右子树也分别为二叉搜索树。对一颗二叉搜索树进行中序遍历,就可以按照从小到大的顺序,将各节点关键码排列起来,所以被称为二叉排序树。BST的结构如下:template<typ原创 2021-07-10 20:23:19 · 428 阅读 · 1 评论 -
C++:多态(重写,多态原理、单继承和多继承的虚函数表)
目录1. 多态的相关概念和性质2. 虚函数重写时的两个例外1. 多态的相关概念和性质概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态的构成条件:① 父类函数必须为虚函数,并且在子类函数中必须重写该函数。② 必须要通过父类的指针或引用去调用虚函数。被virtual关键字所修饰的函数就是虚函数。所谓虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称子原创 2021-05-30 20:28:58 · 770 阅读 · 6 评论 -
C++:继承(继承的概念和性质,赋值兼容规则,菱形继承和虚拟继承)
目录1. 继承的相关概念和性质2. 赋值兼容规则和同名隐藏3. 派生类的默认成员函数4. 菱形继承和菱形虚拟继承5. 组合和继承1. 继承的相关概念和性质概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段****,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。性质:当子类继承父类是按照public继承的,则原来父类中的p原创 2021-05-30 16:45:00 · 396 阅读 · 9 评论 -
C++:STL——栈、队列和优先级队列的模拟实现
文章目录前言1.stack1.1 stack的介绍和使用1.2 stack的模拟实现2. queue2.1 queue的介绍与使用2.2 queue的模拟实现3. priority_queue3.1 priority_queue的介绍和使用前言在讲这些之前,我们需要了解一下双端队列:dequedeque:是一种双开口的"连续"空间的数据结构,其含义其实就是可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,插效率高,不需要搬移元素;与list比较,空间利用率比较高。deq原创 2021-05-26 15:53:30 · 408 阅读 · 2 评论 -
C++:Copy-On-Write技术以及string类的模拟实现
文章目录1.1.原创 2021-05-14 14:36:18 · 784 阅读 · 12 评论 -
C++:STL——vector的模拟实现
文章目录1. vector的介绍和使用2. vector的模拟实现2.1 vector构造函数和拷贝构造函数2.2 insert函数和eraser函数2.3 reserve函数和resize函数2.4 push_back函数和pop_back函数2.5 begin函数和end函数2.6 size函数、capacity函数2.7 empty函数和operator[]重载2.8 完整代码和相应测试1. vector的介绍和使用vector是表示可变大小数组的序列容器。就像数组一样,vector也采用原创 2021-05-05 20:57:37 · 336 阅读 · 4 评论 -
C++:STL——List的模拟实现
文章目录1. List的介绍和使用1.1 List的介绍1.2 List类一些接口的使用2. List的模拟实现1. List的介绍和使用1.1 List的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高原创 2021-05-04 17:15:09 · 276 阅读 · 4 评论 -
C++:模板(函数模板和类模板)
文章目录1. 泛型编程2. 函数模板2.1 概念2.2 格式2.3 原理2.4 实例化2.4.1 隐式实例化2.4.2 显示实例化2.5 最佳匹配原则2.6 函数模板和模板函数3. 类模板3.1 格式3.2 实例化3.3 非类型模板参数3.4 零初始化3.5 typename和class3.5.1 只能使用typename的例子3.5.2 只能使用class的例子1. 泛型编程还记得我们经常使用的swap函数的实现吗?void swap(int& a,int& b){ int t原创 2021-04-22 17:29:01 · 927 阅读 · 2 评论 -
C++:动态内存管理 (new和delete)和常见的面试题
文章目录1. C/C++的内存分布2. C++的动态内存管理方式1. C/C++的内存分布之前也提到过,程序在内存中总共有五大区域,分别为:栈、堆、数据段、代码段和内核空间,但是实际上并不只有五大区域,还有一个区域位于栈和堆之间,叫做内存映射段,它可以用来存放用户自己创建的共享内存,实现进程间通信。但是对应在程序代码中,我们能够知道这些代码的对应这六大区域中的哪一个吗?举个例子:int globalVar = 1;static int staticGlobalVar = 1;void Tes原创 2021-04-22 11:11:41 · 347 阅读 · 1 评论 -
C++:运算符重载、static、友元函数和友元类、内部类
文章目录1. 运算符重载1.1 重载 +、-、*、/、% 运算符1.2 重载 +=、-= 运算符1.3 重载 前++、后++ 运算符1.4 重载 <、>=、>、<= 运算符1.5 重载 >> 、<< 运算符2. static成员3. 友元函数、友元类3.1 友元函数1. 运算符重载此处我们建立一个Test类来对其进行相应的运算符重载。class Test{public: explicit Test(int data ,char tmp = '0')原创 2021-04-20 14:33:04 · 629 阅读 · 1 评论 -
C++:类的6个默认成员函数以及深浅拷贝
文章目录1. 类的6个默认成员函数1. 类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。构造函数析构函数拷贝构造函数赋值重载函数取地址重载函数取地址重载函数常方法...原创 2021-04-19 22:20:48 · 429 阅读 · 2 评论 -
C++:this指针、const于不同位置时的含义以及类的一些基础概念
文章目录1. 类的基本概念1.1 碎片知识1.2 类大小的计算2.this指针2.1 概念2.2 特性3. const成员函数1. 类的基本概念1.1 碎片知识① 类的定义。class className{ // 类体:由成员函数和成员变量组成};其中,class为定义类的关键字,className为类的名字,{}中为类的主体。类中的元素称为类的成员,类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数。② 类有三大访问限定符public(公有):它修饰的成员原创 2021-04-19 13:56:11 · 252 阅读 · 0 评论 -
C++:详解按引用传递、内联函数,auto用法、指针空值
文章目录1.引用1.1 引用前言1.引用1.1 引用前言在未学引用概念之前,我们在声明一个swap函数的时候,通常是怎么实现的呢?下面有三种实现swap功能的代码,我们首先来对其逐一分析分析。代码1void swap(int a,int b) { int tmp = a; a = b; b = tmp; } 看到这里,肯定有很多人会发现代码1是行不通的,无法真正的对a,b进行交换,因为在调用swap函数的时候,传过去的参数是只原创 2021-03-30 16:01:45 · 528 阅读 · 0 评论 -
C++:详解函数重载(详细探究Windows和Linux下函数的修饰规则)
文章目录1. 函数重载1.1 函数重载概念1.2 函数重载的深度探究1. 函数重载1.1 函数重载概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题,重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。概念什么的太复杂,总结下来就两点函数名字相同函数的参数列表不同。(即参数个数 或原创 2021-03-30 09:12:26 · 378 阅读 · 2 评论