自定义博客皮肤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)
  • 收藏
  • 关注

原创 29.IO流(了解)

​ C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。从标准输入设备(键 盘)读取数据,并将值存放在变量中。将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。C语言借助了相应的缓冲区来进行输入与输出。

2024-05-16 14:00:52 409

原创 27.C++的类型转换(介绍了static_cast、reinterpret_cast、const_cast、dynamic_cast的用法)

在C语言中,如果。隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败显式类型转化:需要用户自己处理缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换C风格的转换格式很简单,但是有不少缺点的:隐式类型转化有些情况下可能会出问题:比如数据精度丢失显式类型转换将所有情况混合在一起,代码不够清晰因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。

2024-05-14 13:48:49 305

原创 26.特殊类的设计(设计不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类/只能创建一个对象(单例模式))

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。

2024-05-13 20:14:46 848

原创 25.智能指针(auto_ptr的使用和模拟实现、shared_ptr的使用和模拟实现、unique_ptr的使用和模拟实现、weak_ptr的使用和模拟实现、智能指针的线程安全问题)

还不能将其称为智能指针,因为它还不具有指针的行为。指针可以解引用,也可以通过。应运而生,其原理:简单粗暴 – >防拷贝(防止智能指针对象被拷贝)。的实现原理:管理权转移的思想,下面简化模拟实现了一份。下面我们先分析一下下面这段程序有没有什么。,因此需要为智能指针管理的资源定制删除器。重载下,才可让其像指针一样去使用。我们仅限于了解,拒绝使用它。调用这里又会抛异常会如何?解决方案(定制删除器)内部释放资源使用的是。

2024-05-10 13:20:55 653

原创 24.c++异常(异常的抛出和捕获、异常的重新抛出、抛出异常对象、抛出派生类对象、异常规范)

Start()return ret;

2024-05-09 17:47:17 806

原创 23.c++11新特性(默认移动构造和移动赋值、default关键字、delete关键字、lambda的用法,function包装器和bind绑定的用法,可变参数模板)

如果你没有自己实现。

2024-05-09 14:15:09 224

原创 23.右值引用_c++11(左值引用的使用场景、右值引用的使用场景、左值引用和右值引用的对比、移动构造、移动赋值、右值引用完美转发)

右值引用和左值引用减少拷贝的原理不太一样1.左值引用是取别名,直接起作用。2.右值引用是间接起作用,实现移动构造和移动赋值,在拷贝的场景中,如果是右值(将亡值),转义资源。

2024-05-08 11:22:06 1005

原创 23.c++11的新特性_1

由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是。关键字decltype将变量的类型声明指定为表达式的类型。这两个有在单独的博客介绍,其他的大家了解一下即可。让模拟实现的vector也支持{}初始化和赋值。

2024-05-05 21:02:41 362

原创 22.位图和布隆过滤

1.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】2.给定100亿个整数,设计算法找到只出现一次的整数?3.给一个超过`100G`大小的`log file`, `log`中存着`IP`地址, 设计算法找到出现次数最多的`IP`地址?4.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法

2024-05-05 20:31:25 681

原创 21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)

【代码】21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)

2024-05-05 18:48:53 219

原创 20.哈希表(哈希冲突,闭散列、线性探测,开散列、哈希桶)

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2 N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对和进行介绍。

2024-04-30 20:53:08 813

原创 17. map和set的模拟实现(也就是用红黑树封装map和set)

有不清楚的地方,参考和。

2024-04-24 23:18:47 278

原创 19.红黑树的模拟实现

/ 枚举结构RED,BLACK,// 红黑树节点的类模板// 存储的KV值对象// 左子树指针// 右子树指针// 父节点指针// 枚举结构对象// 红黑树节点的构造函数:_kv(kv){}

2024-04-24 18:29:47 699

原创 18.AVL树的模拟实现

/ 节点的类模板// 键对值的对象 _kv// 左子树的根节点// 右子树的根节点// 父节点int _bf;// balance factor:平衡因子// 节点的构造函数:_kv(kv), _bf(0){}

2024-04-24 17:07:45 593

原创 17. map和set的基本使用

/ set的类域std::set// set的类模板如下:在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。与不同,中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由构成的键值对。set中插入元素时,只需要插入value即可,不需要构造键值对。set中的元素不可以重复(因此可以使用set进行去重)。使用set。

2024-04-21 18:01:16 582

原创 16.二叉树的OJ题

如果root的左右子树都没有p节点(或者q节点),那么我们将root节点从对应的栈中拿出(因为root左右子树中没有对应的p节点(或者q节点),那么root节点肯定不是到p或者q节点的路径上的节点)我们按照前序遍历的方法来遍历这个二叉树,如果这个节点不是我们要找的p或者q节点,那么我们就将节点入栈(相应的。2.当我们找到p和q的路径之后,我们只要找到两条路径相交的节点,那么这个节点就是我们要找的最近公共祖先节点。当root为p或者q节点时,那么root就是p和q的最近公共祖先。

2024-04-21 15:35:05 751

原创 15.二叉树进阶(二叉搜索树的模拟实现和二叉搜索树的应用)

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:二叉搜索树:一颗二叉树,可以为空;如果不为空,满足以下性质:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树。

2024-04-19 16:26:51 404

原创 14.多态(多态的构成条件、虚函数的重写、抽象类也就是纯虚函数的类、虚函数表、单继承和多继承的虚函数表)

重定义在继承这篇文章中有详细的介绍中有详细介绍3.

2024-04-18 15:32:39 1081

原创 13.继承(基类、派生类、同名函数、同名变量、虚拟继承、虚拟继承的原理、继承关系和访问限定符)

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。/*继承白箱复用假如在类X中,共有100个成员,其中80个是保护成员,20个是共有成员,则任何一个成员的调整都有可能影响类Y耦合度高public继承是一种`is-a`的关系。也就是说每个派生类对象都有一个基类对象。int _x;int _y;

2024-04-16 22:09:42 646

原创 12.模板进阶(模板的全特化,偏特化,声明与定义分离)

​ 一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-04-16 20:31:36 699

原创 11.stack和queue的模拟实现和相关习题(容器适配器和优先级队列)

队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队列尾部入队列pop_front。

2024-04-16 19:16:38 739

原创 10.list的模拟实现(普通迭代器和const迭代器的类模板)

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

2024-04-14 21:31:27 611

原创 9.vector的使用介绍和模拟实现

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

2024-04-11 21:56:41 1185

原创 8.string库函数的用法以及string的模拟实现

8.string库函数的用法以及string的模拟实现

2024-04-10 08:58:27 1037

原创 6.模板初阶(函数模板、类模板、类模板声明与定义分离)

6.模板初阶(函数模板、类模板、类模板声明与定义分离)

2024-04-09 17:23:05 257

原创 5.c++内存管理(new、delete、malloc、free的比较)(内存泄漏的问题)

5.c++内存管理(new、delete、malloc、free的比较)(内存泄漏的问题)

2024-04-09 16:54:11 867

原创 4.类与对象(下篇)explicit关键字、static关键字、友元函数、内部类、匿名对象。拷贝对象时编译器优化

4.类与对象(下篇)explicit关键字、static关键字、友元函数、内部类、匿名对象。拷贝对象时编译器优化

2024-04-09 16:09:49 603

原创 3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类

介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类

2024-04-08 16:50:19 1028

原创 2.类与对象(上篇)

类体中内容称为。

2024-04-08 11:11:45 612

原创 1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

2024-04-07 22:55:32 767

原创 8.排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序)的模拟实现

(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序)的模拟实现

2024-04-07 21:00:15 923

原创 7.二叉树的遍历方式及二叉树习题

由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)**又可解释为根、根的左子树和根的右子树。**NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层。上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在。

2024-04-06 20:43:01 722

原创 6.二叉树的基本概念,堆结构的模拟实现,堆排序和topk问题

的。

2024-04-06 18:30:55 1157

原创 5.栈和队列的模拟实现以及相应习题

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。**栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,。出栈:栈的删除操作叫做出栈。。

2024-04-05 21:46:16 486

原创 4.双向循环链表的模拟实现

【代码】4.双向循环链表的模拟实现。

2024-04-05 18:29:12 451

原创 3.单链表模拟实现和链表习题

一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。注:在旧链表中,7所在的节点,指向2所在的节点;在新链表中排序后,7是尾节点,但是7还指向2所在的节点,那么单链表变为了一个循环链表。注:就是将这个有环的链表分为两个链表;这两个链表相交的节点就是环的入口节点。,一般不会单独用来存数据。,如哈希桶、图的邻接表等等。、非顺序的存储结构,数据元素的。

2024-04-04 17:49:44 974

原创 2.顺序表

线性表()是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2024-04-02 21:27:33 691

原创 1.时间复杂度和空间复杂度

斐波那契数列(Fibonacci sequence)是一个以递归方式定义的数列,它以递推关系式来定义,每个数都是前两个数的和。其前几个数字是 0、1、1、2、3、5、8、13、21、34,依次类推。数列的递推关系式可以用以下形式表示:其中,( F(n) ) 表示第 ( n ) 个斐波那契数,( F(0) = 0 ),( F(1) = 1 ) 是数列的初始值。斐波那契数列最初是由意大利数学家斐波那契在他的著作《算盘书》中描述的一种理想的兔子繁殖问题而引入的。

2024-04-02 17:16:58 222

原创 12.文件操作

磁盘上的文件便是文件程序文件数据文件。

2024-03-30 21:28:42 919

原创 11.动态内存管理

数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我们一定会对内存的大小做灵活的调整。分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。指向的空间不是动态开辟的,那free函数的行为是未定义的。(在堆上申请的空间)

2024-03-28 21:06:22 897

空空如也

空空如也

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

TA关注的人

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