自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目--基于http协议的小型web服务器

在我们对Linux以及C++学习的过程中,我们只进行基础语法的学习是远远不够的,所以我们找到了一个项目用以练手众所周知C++的boost库只提供查询功能,没有提供搜索功能,而我们这次的项目,就是来实现一下boost的文档搜索前置准备我们需要进行boost文档搜索,就一定先拥有一个boost文档,我们的官方给我们的boost由一个离线版本的boost,和一个在线版本的boost,我们可以将离线的boost,下载到我们本地,用于我们离线搜索,具体可以到官网进行搜索在我们下载完成离弦的boost之

2022-02-13 01:38:04 1256 1

原创 项目--高并发内存池

学习C++也有不少时日了,今天我们来学习一个项目,该项目是借鉴谷歌的tc-malloc,让我们一起来认识一下这个设计极其优秀的项目吧需求分析我们该项目利用了设计模式中的池化技术,在传统的内存池上进行了优化,该内存池可以有效地提高内存申请效率以及解决内存碎片化的问题普通内存池的优缺点我们先来回顾一下内存池的主要思路,就是预先开辟一大块内存,当我们程序需要使用内存时,直接从该大块内存中拿取一块,可以提高申请释放效率,而不需要再去new/malloc从堆中申请内存优点:提高效率,解决部分内存碎

2022-02-13 01:37:20 400 3

原创 Linux--17高级IO

五种IO模型我们在内存与外设进行数据传输的过程中,会有5种方式来进行不同的传输,在此我们来分别了解一下这五种IO方式阻塞IO阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式我们用钓鱼的例子来理解这个IO方式,我们可以将这种IO方式类比为一个平静的钓鱼人,当没有鱼的时候,就一直在等待中,有鱼了,就钓起来,这种IO方式数据传输的不会有损失,但是效率较低非阻塞IO非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且.

2021-11-08 14:37:16 362 1

原创 Linux--16.以太网

认识以太网 以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等; 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等; 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等; 以太网帧格式源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的; 帧协议类型字段有三种值,

2021-11-04 14:06:12 201

原创 Linux--15.IP协议

当我们了解了应用层与传输层的协议之后,我们继续向下,进入网络层,来学习一下网络层的关键协议,IP协议实际上,我们的应用层协议负责的是请求的构建与解析,传输层的协议是为数据的传输制定了规则,保证了效率与可靠性,而实际上我们具有传输能力的是网络层的IP协议,它提供了将数据从主机A跨网络传输给主机B的能力IP协议基本概念主机: 配有IP地址, 但是不进行路由控制的设备;路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称; IP协议报头4位版本.

2021-11-03 15:57:57 53

原创 Linux--14.TCP协议

我们在上一章中应用层HTTP的协议,这一章中,我们自顶而下,进入到我们下一层--传输层,来了解一下传输层的两种协议,其中包括我们最重要的TCP协议再谈端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看);我们在这里对五元组来进行简单的介绍:端口号:标识另一台主机的一个进程,我们的内核通过哈希.

2021-11-02 09:35:55 108

原创 Linux--13.HTTP协议

我们在之前的章节中已经初步了解了协议,所谓协议就是指我们的一种“约定”,现在,让我们自顶而下的去探究我们各个层级的协议,我们先从应用层的HTTP协议开始HTTP协议的概念在我们了解HTTP之前,要先明确我们几个必要的概念HTTP(HyperText Transfer Protocol,超文本传输)的协议HTTP是无连接,无状态,服务于应用层的协议这里的无连接我们可以理解为:HTTP协议本身没有维护连接信息,HTTP会交给网络协议栈传输层的TCP协议,而TCP协议则是面向连接的无状态

2021-10-29 13:46:14 63

原创 Linux--12.socket套接字

其实我们网络之间的通信本质上还是进程间通信,我们将网络看成他们进程之间的临界资源,实际上就是本地进程与远端服务器进程间的通信源IP地址和目的IP地址在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址,实际上这两个地址就是发送方地址与接收方地址端口号端口号(port)是传输层协议的内容端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 + 端口号能够标识网络上的某一台主机的某一

2021-10-27 13:22:55 137 1

原创 Linux--11.网络基础

计算机网络背景网络,是我们通信的重要媒介,在我们之前的学习当中,所有的操作都只是在局部单机进程进行通信,数据交流的,而网络则是可以完成计算机与计算机之间的通信事实上在网络出现之前,计算机是用来计算导弹轨迹的,计算机可以提高我们的计算效率,但是随着计算量的增加,单一计算机已经不能满足计算需求了,需要计算机与计算机之间的通信,如果计算机与计算机通过人来进行通信的话效率太低了,且可能出错,所以我们由此出现了计算机网络,来实现计算机与计算机之间的通信独立模式: 计算机之间相互独立网络互联: 多.

2021-10-22 13:18:10 43

原创 Linux--10.多线程(下)

生产者消费者模型我们先来举一个简单的例子去理解一下我们的生产者与消费者模型,在大草原上,草在生长,这就是生产者在生产,羊在吃草,这就是消费者在消费,当我们草被吃得差不多了,牧羊人就阻止羊再继续吃草了,当草长得差不多了,牧羊人就带这羊来继续吃草了,这样循环往复,周而复始,其实就是我们的一个生产者与消费者模型,在我们内存块中,生产者为消费者提供任务,消费者拿到任务开始执行,这一过程,当内存块中的数据达到一个高水位线,操作系统就会通知生产者进行等待,通知消费者开始执行任务,当内存块的数据达到低水位线,操作系统

2021-10-19 16:40:53 48

原创 Linux--9.多线程(上)

我们之前学习过Linux之中的进程,了解了多个进程间的各种细枝末节,在今天这一章我们来学习一下线程,在这里我们先来澄清一个重要的点,Linux中并没有多线程,没有所对应的数据结构支持,在Linux中,线程实际上是通过进程进行模拟的,这个概念在我们后面的学习中会更加明确线程的概念在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在CPU眼

2021-10-16 15:03:16 38

原创 Linux--8.信号

信号入门生活角度的信号你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递。也就是你能“识别快递” 当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。那么在在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的行为并不是一定要立即执行,可以理解成“在合适的时候去取”。 在收到通知,再到你拿到快递期间,是有一个时间窗口的,在这段时间,你并没有拿到快递,但是你知道有一个快递已

2021-10-14 17:04:15 92

原创 Linux--7.进程间通信

我们知道,进程之间是具有独立性的,两进程互不影响,但是如果所有的进程都完全独立,那也会有诸多问题,会造成进程与进程间相互协作的难点,所以我们引入了进程间通信进程间通信的核心是将两进程指向同一资源进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制

2021-10-13 16:41:21 85

原创 Linux--6.基础IO

C文件接口我们在C语言中接触过文件操作,现在我们来回顾一下在我们C中的文件操作写文件:我们先创建了一个log.txt而后将A到Z输进了这个文件,最后关闭文件我们可以看到,我们将26个字母放到了这个文件中上面展示了我们的fopen操作,我们先来认识一下这个操作fopenFILE *fopen(const char *path, const char *mode);这就是fopen函数,我们现在对其进行解释path :要打开的文件mode:打开方式r..

2021-10-13 12:21:07 33

原创 Linux--5.进程的控制

当我们在了解了进程的基本概念之后,我们接下来需要对进程进行更深层次的学习,在这一章我们来认识一下进程的控制,理解进程底层相关的操作进程的创建fork函数初识 我们之前对于fork函数的认知仅仅停留在了在父进程中开启子进程的层面,今天我们来对fork进行更深层次地剖析在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h> pid_t fork(void); 返回值:自进程中返

2021-09-28 17:34:28 59

原创 Linux--4.进程的概念

进程基本概念课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(CPU时间,内存)的实体我们知道,我们在编译完程序之后会生成一个可执行文件,这个可执行文件会有两部分内容:内容+属性,当我们将这个文件运行起来,本质其实就是将其加载到了内存中,而程序文件加载到内存中,就变成了进程,而这个进程的组成也就变为了:对应的文件+进程属性描述进程-PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 课本上称之为PCB(process c

2021-09-24 19:06:18 41

原创 Linux--3.冯诺依曼体系与操作系统概念

冯诺依曼体系结构操作系统(Operator System)冯诺依曼体系结构在我们开始学习操作系统的过程中,我们是绕不开冯诺依曼体系结构的,那么什么是冯诺依曼体系结构呢?我们常见的计算机,如笔记本,台式机,不常见的计算机,如服务器等,大都遵守冯诺依曼体系上面的图就是最基础的冯诺依曼体系结构,我们对其中很多设备先进行解释输入设备:键盘,鼠标,摄像头,麦克风,网卡,硬盘...输出设备:显示器,声卡,喇叭,网卡,硬盘....我们的输入输出设备可以统称为外部设备,外设,这里我.

2021-09-18 15:20:47 85

原创 基础数据结构实现

本章会将常用的数据结构以及基础排序算法一一实现,方便更加深刻的理解算法与数据结构的魅力所在单链表typedef int DataType;typedef struct ListNode{ DataType data; struct ListNode* next;}ListNode;void Print(ListNode* plist){ ListNode* cur = plist; while (cur != NULL) { printf("%d->", cur-

2021-09-18 13:13:01 50

原创 刷题--剑指offer

本章节内容会收录本人刷剑指offer的过程,以应对大公司实习或者秋招的要求,语言采用C++,纸上得来终觉浅,绝知此事要躬行

2021-09-16 18:30:39 43

原创 Linux--2.Linux开发环境

Linux 软件包管理器 yum在我们Linux平台下,若想去使用编译器去编辑代码,需要进行安装vim,那么如何进行安装vim呢?首先,我们需要在命令行中进行搜索 在网络保障的环境下输入yum list | grep lrzsz 搜索结果如下lrzsz.x86_64 0.12.20-36.el7 @base 前面的表示64位系统下的安装包,选择包是要与系统匹配,后面是版本号以及软件...

2021-09-16 15:41:45 912

原创 Linux--1.初识Linux(基本指令)

从今天开始,我们就进入了全新的一章,Linux的学习,Linux的学习无疑是很重要的,因为它关乎操作系统,关乎底层,我们先来通过一些问题,来对Linux有一个初步的认识1.为什么企业选择Linux?其实这个原因呢,就是因为我们的Linux是一个开源免费且稳定的操作系统,对于企业而言可以节约大量的成本,选择Linux是一个很好的方案2.操作系统是做什么的?OS(操作系统):它是一款搞“管理”的软件,主要管理:软件+硬件3.为什么我们登陆时会有用户之分呢?我们有普通用户和root用户(只

2021-09-14 13:17:52 153

原创 数据结构--B树

基本搜索结构 B-树概念 B-树的插入分析 B-树的插入实现 B+树和B*树 B-树的应用基本搜索结构我们先来回顾一下我们的数据结构,数据结构管理数据1.简单地将数据存起来2.除了存储数据,还需要可以快速搜索数据搜索1.搜索二叉树,极端情况下退化,类似单支,效率就变成了O(N)2.为了解决上面的问题,提出平衡树的概念,AVL树,红黑树。--O(logN) --map/set3.有没有更好的数据结构,哈希/散列表--O(1) --unorde.

2021-09-11 14:34:19 835 1

原创 数据结构--LRU Cache

什么是LRU CacheLRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Intern

2021-09-09 17:53:45 253 1

原创 数据结构--并查集

1. 并查集原理 2. 并查集实现 3. 并查集应用并查集原理并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-fifind set)。 并查集是一个森林--多棵树构成的森林并查集,多个集合构成,每个集合就可以认为是一棵树并:合并多个集合查:两个值是否

2021-09-09 15:47:50 85 1

原创 C++--23.类型转换

C语言中的类型转换 C++强制类型转换 为什么需要强制类型转换 RTTI C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。 1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 2. 显式类型转化:需要用户自己处理 int i = 1; double d = 8.88; i =

2021-09-07 16:13:23 50 1

原创 C++--22.特殊类的设计

请设计一个类,只能在堆上创建对象我们分析,当一个类只允许在堆上创建对象,原本,正常创建对象一定会调用构造函数,或者拷贝构造,要使用构造函数或者拷贝构造去创建对象(别人调用拷贝构造会在栈上生成对象),是不能保证只在堆上创建的,所以我们需要将构造函数与拷贝构造声明私有,因为无法通过构造函数与拷贝构造创建,所以我们需要引入一个静态成员函数,在此函数中创建对象实现方式: 1. 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。 2. 提供一个静态的成员函数,在该静态成员函数中

2021-09-07 14:52:45 43

原创 C++--21.智能指针

我们知道,C++中是没有gc的,new/malloc出来的资源,是需要我们自己去手动释放的,此时便会出现一些问题,1.忘记释放,2.发生异常安全,这些问题就会导致资源的泄露,就发生了严重的问题,所以,我们的智能指针出现了为什么需要智能指针? 内存泄漏 智能指针的使用及原理 C++11和boost中智能指针的关系 RAII扩展学习 为什么需要智能指针?其实归根结底就一点,为了防止内存泄漏,防止我们因忘记释放资源或者在malloc与free之间抛出异常,出现异常安全时资源的流失.

2021-09-06 19:12:45 237 3

原创 C++--20.异常

C语言传统的处理错误的方式 C++异常概念 异常的用法 自定义异常体系 标准库异常体系 异常的优缺点C语言传统的处理错误的方式传统的错误处理机制: 1. 终止程序,如assert,发生严重错误时,主动调用exit(xx);缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 2. 返回错误码,有些API接口都是把错误码放到errno中,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误 3. C 标准

2021-09-03 20:29:27 99

原创 C++--19.C++11

在我们C++的发展历程中,拥有两个很关键的版本,一个是C++98,一个是C++11,在这一章中我们一起就来了解下C++11给我们增加了哪些重要的新特性吧C++11简介 列表初始化 变量类型推导 范围for循环 final与override 智能指针 新增加容器---静态数组array、forward_list以及unordered系列 默认成员函数控制 右值引用 lambda表达式 线程库 C++11简介在2003年C++标准委员会曾经提交了一份

2021-09-03 16:02:03 61

原创 C++--18.哈希应用

在我们上一章对哈希有一个大致的了解之后,我们在这一章来学习一下它的应用哈希的应用位图在我们了解位图之前,我们先来看一道经典的题目给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中?我们再看到这道题首先会有几个思路1.直接遍历,判断,O(N)2.排序后二分查找,O(NlogN)3.开辟一个42亿*4(因为整数的范围就在42亿)大小的哈希表/红黑树,然后依次映射进去,判断重复事实上这些方案在内存足够的情况下是可行的,但是在这里

2021-08-31 19:00:58 101

原创 C++--17.哈希

我们在之前一定听过哈希映射,哈希表这种神奇的东西,在这一章我们来深入探究一下,这种以空间换时间的重要思想unordered系列关联式容器 底层结构 模拟实现 哈希的应用 海量数据处理unordered系列关联式容器unordered_map与unordered_set 我们的set与map加上unordered之后,我们根据字面意思也可以进行理解,就是未排序的set与mapmap/set与unordered_map/unordered_set区别与联系1.他都可

2021-08-30 22:22:14 130

原创 C++--16.模拟实现set与map

在我们了解了AVLTree与红黑树之后,我们便可以去理解set与map的底层了,stl中的set与map就是用红黑树去实现的,那么他们到底是如何实现的呢?我们一起来了解下stl中的map与set源码框架map框架set框架我们其实按照一般的想法去理解,set与map应该是分别使用一棵二叉树来进行底层实现,但其实不是的,因为那样就会引起代码的冗余,我们的map与set仅仅是模型的参数不同,set是<k,k>模型,map是<k,value>模型,也仅仅只有参数不同..

2021-08-28 01:15:54 100

原创 数据结构--AVL树与红黑树

我们在上一章中初步认识到了set与map,了解了他们的使用,但是仅仅隐约的窥见了他们的底层实现,而这一章我们一起了解下他们的底层实现,以及数据结构较为复杂的部分,AVL树与红黑树set与map的底层结构 前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关

2021-08-26 22:02:19 485 6

原创 C++14.--初识set与map

关联式容器 键值对 树形结构的关联式容器 关联式容器在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别? 关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。键值对用来表示

2021-08-21 21:33:19 117

原创 数据结构--二叉树进阶

因为我们之前在学习数据结构的时候使用的是C语言,但是并不是所有的数据结构都适合使用C语言学习,如今我们了解了C++的基础语法,具备了学习这些稍微难一点的数据结构的前提,所以我们再次回顾数据结构,使用C++这一更加先进的武器,来解决更加复杂的问题二叉搜索树 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也

2021-08-20 22:24:13 168

原创 C++--12.多态

多态的概念 多态的定义及实现 抽象类 多态的原理 单继承和多继承关系中的虚函数表 多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个简单的例子,比如我们去买票,普通人去买就是全价买票,学生去就是半价学生票,这就是两种不同的对象去调用买票这个函数时得到的不同结果,又称多态多态的定义及实现多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Pe

2021-08-18 13:56:26 39

原创 C++--11.继承

继承的概念及定义 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 复杂的菱形继承及菱形虚拟继承 继承的总结和反思继承的概念及定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用#i

2021-08-15 17:32:41 66

原创 C++--10.再次了解模板

非类型模板参数 类模板的特化 模板的分离编译 非类型模板参数模板参数分 类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。我们先来看这样一段代码,这就是类型参数#define N 1000//类型参数template<class T>class Array{public:priv

2021-08-13 13:22:55 38

原创 C++--9.stack与queue

stack的介绍和使用 queue的介绍和使用 priority_queue的介绍和使用 容器适配器我们在上两章中学习了链表与线性表的容器,今天我们来了解一下站与队列的容器stack的介绍和使用1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的

2021-08-13 09:19:11 40

原创 C++--8.list类

我们在上一节中了解了vector这个容器,但是它有一些缺点vector缺点:1.头部和中部插入删除效率低,O(N)因为需要挪动数据2.插入数据空间不够需要增容,增容需要开辟空间,拷贝数据,释放旧空间,代价很大优点:支持下标的随机访问,间接就很好地支持排序二分堆算法等所以我们出现了list容器,可以弥补vector的一些缺陷list优点:1.list头部,中间插入不再需要挪动数据,效率高。O(1)2.list插入数据是新增节点,不需要增容缺点:不支持随机访问

2021-08-12 09:23:21 280

空空如也

空空如也

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

TA关注的人

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