自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 【C++】异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了所以实际中都会定义一套继承的规范体系这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。

2024-04-15 21:15:52 716

原创 【C++】C++11(万能模版、完美转发,可变参数模版,lambda表达式,包装器function+bind绑定)

定义了一个可以调用的对象 / 匿名函数,一般定义在局部,特点是可以深度绑定了局部的数据。lambda表达式,实际上是一个匿名函数,实际上是在定义一个函数(局部的函数)lambda表达式通常是用来定义小函数lambda表达式在局部是很好用的,最特别的就是捕捉列表Add叫lambda表达式的对象 – lambda定义的是一个对象。lambda表达式书写格式:lambda表达式各部分说明:捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数。

2023-10-07 17:38:14 970

原创 【C++】C++11(列表初始化和右值引用)

传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。

2023-09-20 21:07:35 262

原创 【C++】哈希思想的应用——位图、布隆过滤器和哈希切割

位图是直接映射,也不存在哈希冲突,空间消耗几乎没有,并且快,直接是O(1),但是位图只是适合于整形的查找,并不适用于。我们知道,比特位是最小的存储单位,我们的数据类型最小是char,1个字节,占有8个比特位,我们还是存储最小的数据类型比较好,这样便于后面的数据映射。b. 映射冲突到这个编号文件的ip太多 - 但是冲突的太多的话,还是会大量文件存在小文件中,依旧会存在一个小文件太大的情况。其实修改位置的数据和我们惯性思维是有出入的,他对于每一个char类型存的比特位对应的值是从右向左。

2023-09-13 18:25:16 205

原创 【C++】封装unordered_map和unordered_set(用哈希桶实现)

前言: 前面我们学习了unordered_map和unordered_set容器,比较了他们和map、set的查找效率,我们发现他们的效率比map、set高,进而我们研究他们的底层是由哈希实现。哈希是一种直接映射的方式,所以查找的效率很快。与学习红黑树和map、set的思路一样,我们现在学完了unordered_map和unordered_set,本章将模拟实现底层结构来封装该容器! 作者建议在阅读本章前,可以先去看一下前面的红黑树封装map和set——红黑树封装map和set这两篇文章

2023-09-13 14:17:55 146

原创 【C++】哈希——哈希的概念,应用以及闭散列和哈希桶的模拟实现

前面我们一同学习了二叉搜索树,以及特殊版本的平衡二叉搜索树,这些容器让我们查找数据的效率提高到了O(log^2 N)。虽然效率提高了很多,但是有没有一种理想的方法使得我们能提高到O(1)呢?其实在C语言数据结构中,我们接触过哈希表,他可以使效率提高到O(1)。哈希表作为STL中我们所必须学习和了解的容器,是一种一一映射的存储方式,其次它在日常生活中的应用范围也是很广的,例如位图,海量数据筛选中用到的布隆过滤器等等……

2023-09-11 18:42:45 354

原创 【C++】封装map和set(红黑树实现)

这里由于set和map存放的结点一个是Key一个是pair<Key,Value>,所以我们使用模版,把存放的结点泛化。

2023-09-09 11:13:15 307

原创 【C++】详解红黑树并模拟实现

我们还是沿用AVL树节点的三叉链定义方法,颜色我们用枚举来实现:ps:这里一开始结点定义为红色的原因,我们在后文插入的时候会详细讲解。

2023-09-08 16:35:42 353

原创 【C++】详解AVL树并模拟实现

直接实现key_value的结构 – 三叉链的形式(带父节点)图示如下其中:_bf-----balance factor,代表平衡因子右子树与左子树的高度差(2)AVL树部分功能的实现1、查找从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。最多查找高度次,走到到空,还没找到,这个值不存在。

2023-09-07 17:10:15 583

原创 【C++】map和set的介绍+使用

使用 set 容器,必须引入该头文件#include < set >set的使用文档T: set中存放元素的类型,实际在底层存储的键值对。Compareset中元素默认按照小于来比较Allocset中元素空间的管理方式,使用STL提供的空间配置器管理介绍:1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const)

2023-05-06 19:58:03 676 1

原创 【C++】详解二叉树进阶OJ题(更深入理解递归和非递归在二叉树的各种结构的应用)

我们在此前的初阶数据结构讲解中已经讲解了部分二叉树的OJ题,当时我们只学习了C语言,其实还有很多进阶的OJ题用C++来写会比较方便和容易理解,所以本章将在讲解完二叉搜索树后来详解不同类型的二叉树进阶OJ题,校招中涉及也比较多哦!

2023-05-05 14:29:18 266

原创 【C++】二叉搜索树(概念、实现、应用)

在分块讲解前,我们要明白,递归要传根节点,但是用户平常使用这些借口并不会传根节点,而是直接调用,所以我们嵌套一层,这样就可以满足双方的需求了。可以在递归的参数中多一个父亲结点,每次递归都更新一下Parent,然后再带到下一层递归。由于没有二叉搜索树的官方库,我们增删查改的实现需要我们自己来完成,见下面的模拟实现。递归这种思想我么你还需要多加理解,下一章将详细讲解OJ题目,加深我们对于递归的理解!采用递归方式的缺点就是如果数的结点个数足够多的时候,就会有爆栈的风险!当出现单边树的情况时,就是〇(N)的情况。

2023-04-24 10:58:12 431

原创 【C++】多态---下(多态的原理)

多态是父类指针指向父类对象就调用父类的虚函数,指向子类的对象就去调用子类的虚函数。所以到底要去调用哪个函数不是按照指针的类型定的,而是去到指向的对象中去查表。指向谁就在谁的虚表中找虚函数对应的地址 – 这是多态ps:同一个类型都是指向一张表的,同一个类型的不同对象它们的虚表都是一样的。(重点)

2023-04-16 20:36:45 339

原创 【C++】多态---上( 概念、条件及性质)

(一)多态的概念(二)多态的定义和实现(1)多态的构成条件1、虚函数2、虚函数的重写(覆盖)3、多态的条件(重点)(2)虚函数重写的两个例外1、协变(基类与派生类虚函数返回值类型不同)2、析构函数的重写(基类与派生类析构函数的名字不同)(三)C++11---两个关键字之override和final(1)final的用法(2)override的用法(四)重载、覆盖(重写)、隐藏(重定义)的对比(五)抽象类的概念+使用(1)概念(2)接口继承和实现继

2023-04-15 18:22:11 409

原创 【C++】继承---下(子类默认成员函数、虚继承对象模型的详解等)

上篇文章我们一起初步了解了继承的概念和使用,本章我们回家新一步深入探讨继承更深层次的内容。前文回顾——>

2023-04-14 17:17:31 439

原创 【C++】继承---上(继承的引入及使用详解、切片赋值和作用域)

概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承的定义格式:上面我们看到Person是父类,也称作基类。Student(Teacher)是子类,也称作派生类。

2023-04-12 19:57:41 697

原创 【C++】模板进阶(非类型模板参数、类模板的特化和模板的分离编译)

【C++】模板进阶(非类型模板参数、类模板的特化和模板的分离编译)

2023-04-10 21:20:48 471

原创 【C++】STL之stack、queue的使用和模拟实现+优先级队列(附仿函数)+容器适配器详解

stack文档stack文档1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。

2023-04-09 14:08:00 620

原创 【C++】反向迭代器的模拟实现

前面几篇文章我们在模拟实现string,vector和list时都只模拟实现了迭代器,并未单独实现反向迭代器,其实作者在这里是留了一点小心思的。

2023-04-08 19:15:58 374

原创 【C++】STL之list的使用和模拟实现

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2023-04-07 15:38:21 383

原创 【C++】STL之vector的使用和模拟实现

1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小,为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2023-04-05 13:43:07 391

原创 【C++】STL之string的使用和模拟实现

标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原始版本:Meng Lee在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP 版本--所有STL实现版本的始祖。P. J.由开发,继承自HP版本,被采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。RW由Rouge Wage公司开发,继承自。

2023-04-02 11:28:58 356

原创 【C++】内存管理+模板

本章将详细讲解C++内存管理和模板的实现。第一部分我们讲解C++内存管理,C语言中有malloc/calloc/realloc等开辟空间和free释放空间,那么C++将符合实现呢?第二部分我们会一起来初步认识模板与泛型编程,并详细探讨函数模板和类模板,为后续的学习做准备。

2023-03-29 20:50:59 361

原创 【C++】类和对象(下)(详解运算符重载,初始化列表,static成员,友元,内部类,匿名对象以及编译器对拷贝对象时的一些优化等)

C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。返回值类型 operator操作符(参数列表)。注意:不能通过连接其他符号来创建新的操作符:比如operator@重载操作符必须有一个类类型参数用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不能改变其含义。

2023-03-20 20:51:58 222 1

原创 【C++】类和对象(上)(详解类和对象概念,构造函数,拷贝构造函数,析构函数)

比如:之前在数据结构初阶中,如用。

2023-03-19 15:52:17 199

原创 【C++】C++入门(引入C++学习并介绍缺省参数,函数重载,引用,内联函数,auto关键字,nullptr等入门知识)

C语言我们会用NULL对指针初始化,NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。f(NULL);return 0;程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖。c++有bug,会把NULL翻译成0,认成常数。

2023-03-14 21:32:20 100

原创 【C】数据结构之八大排序(附动图及超详解)

本文介绍了详细介绍了八大排序——插入排序,选择排序,希尔排序,堆排序,快速排序,冒泡排序,归并排序,计数排序,内含超详解及动图等讲解,复杂度,非递归版本应有尽有

2023-01-14 20:35:07 359

原创 【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)

【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)

2022-11-29 20:19:03 1324

原创 【C】浅刷栈和队列OJ题

上一篇文章我们使用C语言实现了栈和队列,本章我们利用栈和队列的结构性质讲解几道相关的OJ题,更深刻地理解栈和队列。目录1、括号匹配问题2、用队列实现栈3、用栈实现队列4、设计循环队列

2022-11-12 22:00:00 238

原创 【C】栈和队列的实现

我们在学习完顺序表和链表之后,进一步学习其他更复杂的数据结构。这一章我们来学习栈和队列以及他们的实现,因为结构上的相似,我们会用到上一章讲到的顺序表和链表的部分思想。出栈演示图: 栈严格符合先进后出的原则。我们可以使用顺序表实现栈,也可以使用链表实现栈。对比两种结构,我们发现顺序表尾插尾删所付出的代价更小。第一步我们要创建一个栈的结构,这里我们创建一个可以动态增长的栈:如果我们需要改变数据类型,改STDataType所再定义的类型即可,capacity代

2022-11-09 14:13:05 434 1

原创 【C】单链表OJ题(指定删除,逆置,中间结点,顺序合并,判断回文,公共结点,环形结构)

学习过单链表增删查改的实现操作后,下面我们可以进一步进行到单链表的实战。实战刷题中不可能题题都是增删查改的实现,更多地都是巧妙地利用各种操作实现对链表的修改。本文章就带着大家一起学习单链表常出现且有一定难度的OJ题。

2022-11-03 17:22:21 315 1

原创 【C】单链表的实现(详解增删查改等功能和OJ练习题)

1、链表的定义有了之前的学习,我们认识到顺序表的不足:1.中间/头部的插入删除,时间复杂度为O(N)2.增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3.增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。那么如何优化数据结构以达到优化程序的目的呢?本文章我们就将介绍单链表的实现,能有效优化上述部分问题。1、链表的定义链表是一种。

2022-10-27 19:52:41 623

原创 【C】OJ练习题---单身狗类问题、双指针类(数据结构顺序表)

本章我们介绍的两类练习题主要是关于C语言实现数据结构的复杂度和顺序表类问题。

2022-10-23 15:58:01 480

原创 【C】时间复杂度和空间复杂度(详解,例题,OJ试题)

有了C语言的基础知识,但对于一个代码我们可以用算法和数据结构优化,如何优化我们后续再聊。本章我们需要学习衡量优化的标准是什么?我们知道,对于一个程序,衡量其好坏主要有他运行的时间和占用的空间两部分,下面我们来仔细的讨论一下。

2022-10-21 14:40:28 981 2

原创 详解C程序环境和预处理

本文章将详解C语言的翻译环境和执行环境,并且介绍C程序的运行过程,在此基础上,介绍#define/#if等预处理指令和宏的讲解和应用等等。

2022-10-17 21:28:37 282

原创 C语言文件操作详解(解析各文件函数,如何应用文件函数)

我们为什么要在C语言中引进文件的概念呢?试想一个场景,我们写好了通讯录的源代码运行后录入了联系人的信息,但是每次的操作范围只局限在此次的执行程序中,执行程序一关,联系人的信息随着执行程序在内存中的消失而消失。因此,我们需要把联系人信息保存到硬盘上的话,就需要了文件操作,这就引入了文件。

2022-10-13 15:01:09 1873

原创 c语言之动态内存开辟(free,malloc,calloc,realloc函数的运用及易错点和例子)

我们已经掌握的内存开辟方式有:intval=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1.空间开辟大小是固定的。2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。...

2022-09-01 15:45:22 816

原创 C语言模拟实现字符函数和内存函数

最基本字符函数和内存函数的实现原理,大家可以学习一下,深刻理解,这样才能更好地运用!

2022-07-18 11:01:58 145

原创 C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)

目录1. 字符指针:2.数组指针和指针数组:3.函数指针:4. 函数指针数组:5.指向函数指针数组的指针:6.回调函数:字符指针,顾名思义,指向字符型数据的指针,也是本文介绍的最简单的一类指针,但是有几点易错的注意点,所以借此机会详解一下。下面是字符指针最简单的用法除此之外,我们常会遇到字符指针指向字符串的情况:这里是把一个字符串放到pstr指针变量里了吗?显然不是,但是为什么能打印出来这个字符串呢?原因是,字符指针存放了字符串首元素的地址,然后printf函数中%s凭借着首元素地址向下找,打印

2022-06-04 23:07:28 84

原创 C语言 整型 和 浮点型 数据在内存中存储详解(内含原码反码补码,大小端存储等详解)

C语言 整型 和 浮点型 数据在内存中存储详解(内含原码反码补码,大小端存储等详解)

2022-05-30 21:05:37 1135 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除