自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux环境变量

1.显示某个环境变量的值echo $变量名 :显示某个环境变量的值。2.设置一个环境变量,只在当前shell有效export 变量名=值 :设置环境变量。3.envenv:显示所有的环境变量4.unsetunset 变量名:删除某个环境变量或本地变量。5.setset :显示本地变量和环境变量。通过系统调用设置环境变量或获取环境变量// 获取环境变量值if (path!= NULL) {// 获取所有环境变量。

2025-12-04 16:10:09 859

原创 Linux进程详解

​ 是操作系统分配资源(如 CPU 时间、内存、文件句柄等)并执行的一个程序实例。一个程序可以启动多个进程,每个进程相互独立,拥有自己的地址空间和运行状态。那我们该去如何理解呢?要想理解进程就先要理解计算机的体系结构和什么是操作系统。

2025-11-23 17:46:26 665

原创 C++智能指针

智能指针是一种封装了原始指针的类模板,它能够自动管理动态分配的内存,避免内存泄漏。1. RAII特性RAII()是一种利用对象生命周期来控制程序资源的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。2.重载operator*和opertaor->

2025-10-18 18:00:39 961

原创 C++11

const修饰符后的左。

2025-10-16 23:59:44 881

原创 哈希扩展和应用

注意:第一,上面的哈希切分并不是严格的等分,而是近似的分,哈希切分是有分割不均的,因为会有哈希冲突,所以要切割的分数稍微多些,减少哈希冲突。set是明显不可以的,我们可以简单算一下40亿个不重复的无符号整数所占内存空间的大小,一个无符号整数按4字节,40亿就是160亿字节,1G约等于10亿字节,那么也就是差不多16G的内存,用set是需要在内存中开空间的,你能开16G大的空间吗,显然是不可能的。那么就要介绍位图的概念了。布隆过滤器的思想是将一个元素用多个哈希函数映射到一个位图中,因此被映射到的位置的比特。

2025-10-08 17:07:35 777

原创 C++用哈希表封装unordered_set和unordered_map

unorder_set和unordered_map的底层存储的都是一个哈希表,他们的插入、删除和查找本质上都是哈希表的插入、删除和查找。那么如何封unorder_set和unordered_map使他们复用哈希表呢?这就和封装map和set复用红黑树的原理基本一样。

2025-10-05 14:56:38 346

原创 哈希表原理详解

顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即,搜索的效率取决于搜索过程中元素的比较次数。。该方式即为哈希方法,当向该结构中:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。

2025-09-30 16:37:38 602

原创 C++红黑树封装set和map代码详解

我们都知道set和map的底层都是通过红黑树来实现的,前面讲解了红黑树的原理和代码,那么如何通过红黑树的代码封装实现set和map呢。

2025-09-26 16:14:28 690

原创 C++红黑树详解

1.首先我们要确保插入的节点的颜色是红色的。这是因为如果插入的节点是黑色的会影响所有的路径,因为要保证每条路径上黑色节点的数目是一样的,插入的是红节点则只用看该路径是否满足红黑树的要求。一条最短的路径就是只有黑节点的路径。(红黑树是接近平衡的,AVL树是绝对平衡,但两者的性能相近,AVL树的旋转比较多且复杂 ,红黑树相对简单)2.如果要插入的父亲节点存在且颜色是黑色的,则无需进行调整,因为满足红黑树的性质。这里的a,b,c,d,e是可以变化的对应着各种复杂的情况。1. 按照二叉搜索的树规则插入新节点。

2025-09-21 21:43:36 297

原创 C++AVL树详解

二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整,即可降低树的高度,从而减少平均搜索长度。一棵AVL。例:2.AVL树的插入AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL。

2025-09-21 15:11:41 788

原创 set和map

3.

2025-09-14 19:05:12 911

原创 C++二叉搜索树详解

a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b、最多查找高度次,走到到空,还没找到,这个值不存在。

2025-09-13 15:55:38 686

原创 C++多态详解

在继承中要构成多态还有两个条件1.必须通过基类的指针或者引用调用虚函数(虚函数:即被virtual修饰的类成员函数称为虚函数)。2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2025-09-11 14:24:52 612

原创 C++中的继承

1. 很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。2.多继承可以认为是C++的缺陷之一,很多后来的OO语言都没有多继承,如Java。3. 继承和组合public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。

2025-09-05 20:50:16 956

原创 C++模板的进阶

时,可以使用模板特化(即 "特殊化" 某个类型的模板)。

2025-08-31 19:19:00 413

原创 C++的反向迭代器

反向迭代器以及其模拟实现

2025-08-30 19:31:28 423

原创 C++优先级队列priority_queue的模拟实现

operator()

2025-08-30 17:06:34 667

原创 C++优先级队列priority_queue

优先级队列的介绍和使用,以及其底层的原理堆 建堆,向上调整和向下调整的算法 堆排序和Topk问题

2025-08-29 18:21:19 1623

原创 stack和queue的模拟实现

#pragma once#include<deque>#include<vector>#include<list>namespace my{ //template<class T,class Contain = std::vector<T>> //template<class T, class Contain = std::list<T>> template<class T, class Contain = std::deque<T>> class stack

2025-08-27 22:43:40 660

原创 C++ 栈和队列的使用和介绍

stack和queue的简单介绍,以及什么是容器适配器和栈和队列底层容器deque的介绍

2025-08-27 17:32:19 802

原创 list的模拟实现

/it->调用operator->返回A*,严格来说it->->a1,才是正确的,这里编译器做了优化,省略了一个->

2025-08-26 15:20:45 622

原创 C++ list的介绍和使用

list的介绍和使用

2025-08-26 11:40:15 923

原创 vector的模拟实现

/vector erase和insert迭代器对象后,不能再访问这个迭代器,认为迭代器失效,访问结果是未定义的,通过返回值解决//erase返回被删元素的下一个有效迭代器//insert返回指向新插入元素的迭代器public://构造函数vector(){}//根据迭代器区间初始化= last)++first;//拷贝构造//这里也是深拷贝问题i++)

2025-08-26 10:40:05 1029

原创 C++ vector 介绍与使用

vector的简介和使用

2025-05-06 18:18:35 970

原创 模拟实现string类--不是造更好的轮子只为更好的理解

模拟实现string类

2025-04-29 20:39:46 746

原创 C++ string类

3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大。还有insert(插入),erase(删除),assign(赋值,会覆盖原有的字符串),replace(替换)等函数,用的时候可以查文档进行使用。

2025-04-15 21:55:06 704

原创 C++ STL简介

STL简介

2025-04-08 18:12:54 221

原创 C++模板

模板初阶,模板的格式

2025-04-06 14:23:10 490

原创 C/C++内存管理

和new/delete的区别malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是:1. malloc和free是函数,new和delete是操作符。2. malloc申请的空间不会初始化,new可以初始化。3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可, 如果是多个对象,[]中指定对象个数即可。

2025-04-01 20:04:32 1201

原创 类的综合练习(实现一个完整的日期时间类)

日期时间类 对类相关内容的练习

2025-04-01 17:55:39 183

原创 类和对象(下)

初始化列表,隐式类型转换,explicit关键字,static成员,友元,内部类和匿名对象,编译器对连续的构造和拷贝构造的优化

2025-03-26 21:49:20 1098

原创 C++类和对象(中)

构造函数,析构函数,拷贝构造,运算符重载,赋值重载,前置++和后置++重载,const成员,以及取地址及const取地址操作符重载。

2025-03-24 20:56:29 2230

原创 C++类和对象(上)

类的基本定义,访问限定符和类的实例化。类的实例化及类大小的计算,内存对齐以及this指针。

2025-03-21 18:37:15 2118

原创 C++宏函数,内联函数和空指针(nullptr)

C++宏函数,内联函数和nullptr的详细介绍

2025-03-18 21:01:44 658

原创 C++ auto 关键字和范围for

C++的语法糖,auto关键字和范围for

2025-03-18 19:40:07 571

原创 C++之引用

c++的引用

2025-03-17 22:32:26 1931

原创 C++之函数重载

C++的函数重载及底层原理

2025-03-16 21:33:30 409

原创 C++的输入与输出和缺省参数

C++的输入输出和缺省参数

2025-03-16 16:53:18 357

原创 C++入门之命名空间

C++命名空间 为什么要用 using namespace std;

2025-03-16 15:56:27 859

原创 初始C++

对C++学习之前的一些基本认识和了解

2025-03-15 19:52:20 763 1

空空如也

空空如也

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

TA关注的人

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