自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呋喃吖的博客

专注知识分享

  • 博客(179)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Windows编程】windows窗口创建过程详解

搞windows开发,必须熟悉vs自己的开发工具,这会提高你的开发效率;我用的是vs2013;感觉不错;

2022-11-26 17:22:18 4675 8

原创 【C++】类与类之间的 5 种关系

该文章就是简要的总结一下面向对象的:类与类之间的关系,熟悉类与类之间的关系,能够帮助我们更好的设计出合理的类;: A继承B,说明A is B;

2022-09-28 09:26:16 1296 1

原创 【Linux】IO多路复用--poll函数基本处理流程

poll

2022-09-17 15:09:42 570 1

原创 【大并发服务器开发】简要谈谈分布式服务器的设计方案思路推变过程

服务器的推演

2022-09-15 12:51:56 1098

原创 C++11右值引用的价值体现

好久之前就写了一篇文章:谈谈C++中的左值,右值,右值引用,std::move()的问题是理解移动构造和移动赋值的前提基础;这里简单总结一下:左值引用不能直接引用右值;左值引用要引用右值,需要加const修饰左值引用;右值也不可以直接引用左值;右值要引用左值需要加std::move()函数修饰左值;首先明确一点:右值引用的产生就是为了弥补左值引用的不足!所以先回顾一下,左值引用的价值体现在哪,它的不足又体现在哪;左值引用的第一个价值体现常见就是:左值引用的问题就在于做函数的返回值,它只能解决变量

2022-06-29 20:05:08 522 1

原创 【数据结构】聊聊红黑树的那些事(C++)

前置数据结构知识:二叉树的概念;二叉搜索树的概念和查找插入操作实现;AVL树的概念和左旋右旋 左右旋 右左旋的操作,最好能够基本实现一下其代码;红黑树是什么?它是前提是一个颗二叉搜索树,然后在二叉搜索树的前提下增加了一定的规则,使得红黑树能够成为一种接近于平衡的二叉搜索树,并且不失去其查找效率;那么红黑树必须满足什么样的规则?注意:红黑树这里的路径不是任意结点到叶子结点,而是到达所谓的NIL结点(其实就是空结点);比如上面的路径如果是平时的树,就有5路径,而在红黑树有11条路径;通过对任何一条从根到叶子的

2022-06-01 18:10:44 362 7

原创 【Linux】400行纯C语言代码带你【手撕线程池】

纯C语言手撕线程池!!!!

2022-05-22 21:04:05 1103 20

原创 【Linux】多线程同步--基于环形队列的生产者消费者模型(信号量解决)

文章目录信号量信号量基本原理伪代码POSIX信号量操作函数基于环形队列的生产者和消费者模型总结信号量什么是信号量?本质信号量就是一个计数器,它表示临界资源的数量,也就是说它描述的是有多少临界资源可以分配给线程去访问;对于临界资源来说,假如我们可以把它在细分多个小的资源区域,如果我们有某总手段处理得当,也是可以让多个线程同时访问临界资源的不同区域,从而实现并发的效果;每个线程在访问临界资源时候,首先必须先申请信号量资源,申请成功才可以进入临界资源;一旦申请成功进入临界资源区域,那么也就表示内部一定

2022-05-22 00:40:27 454 6

原创 【Linux】多线程同步--基于阻塞队列的生产者消费者模型(条件变量解决)

文章目录线程同步条件变量条件变量相关接口生产者消费者模型基本理论基于阻塞队列的生产者消费者模型线程同步什么是线程同步?首先先了解一下:互斥锁带来的一个问题:就是线程饥饿现象:就是多个线程长时间访问不到共享资源,不得已使得线程的执行流得以推进执行,这种现象就是线程饥饿现象!有线程饥饿线程的原因就是互斥锁带来的问题!有一种场景是,当一个线程A获得锁时候,进入临界区,访问结束后,释放锁,该线程A大概率的竞争能力比其他线程更加强,有可能重新获得锁,再次访问临界区!而其他线程可能竞争力不够强,长时间无法获

2022-05-20 17:34:17 522 2

原创 【Linux】多线程--互斥锁

文章目录前言基础概念互斥量mutex多线程模拟抢票(没加锁情况)为何多线程访问临界资源是不安全互斥锁相关接口多线程模拟抢票(有加锁)互斥锁实现的基本原理前言为什么线程需要同步和互斥的操作?因为线程引入共享了进程的地址空间,导致了一个线程操作数据时候,极其容易影响到其他线程的情况;对其他线程造成不可控因素,或引起异常,逻辑结果不正确的情况;这也是线程不安全的原因!如何创建一个线程安全函数?只要尽量不使用全局变量,stl,malloc,new 等操作即可;如果要使用,就要控制同步和互斥问题!基础概念

2022-05-12 20:46:30 10855 16

原创 【Linux】深入理解Linux中的线程

文章目录前言理解Linux中的线程linux 线程与线程接口库的关系线程的共享数据和私有数据线程优点线程的缺点线程异常线程用途线程创建--pthread_create函数创建多个线程方式前言什么是线程?对于大多数教材对线程的定义是这样的: 线程就是 进程内部运行的一个执行流分支,属于进程的一部分,粒度比进程更细更加轻量化;可是这定义还有很多信息我们是不知道的。什么是进程内部运行?什么是一个执行流?什么是粒度更细更轻量化?我们尝试推导一下:线程是进程的一个执行流分支,那么也可以说一

2022-05-10 23:26:49 805 6

原创 【操作系统基础】页表 快表 多级页表

文章目录页表页面的大小页表特性PTBR--寄存器快表TLB 命中率基于页表的保护与共享多级页表页表为什么说分页的逻辑地址是一维的地址;从下图我们可以看出,把一个程序分为等大的页面(这里每个页面大小假设4bytes),每一个页面的里的指令(假设每条指令大小为1bytes)都会有相对应的逻辑地址,都是从0开始算起的;页表记录的主要信息就是:页框号和页面号的映射关系,页框号也就是物理地址,页面号也是逻辑地址的一部分;上面的例子中:把程序分为了3个页面的大小,放入到内存中,其中#0页面放入到了f

2022-05-05 15:16:09 8608 9

原创 【Linux】深入理解进程信号(探讨信号的生命周期)从内核角度看待信号

文章目录前言信号注册函数--signal函数信号的种类进程收到信号的处理方案信号的产生方式进程奔溃的本质进程崩溃的解决方案通过系统调用产生信号通过软件条件产生系统调用如何理解OS给进程发送信号阻塞信号信号在内核的表示认识sigset_t 类型信号集操作函数的sigprocmask--修改屏蔽字位图sigpending--获取pengding位图表信息用户态和内核态的理解信号的捕捉过程总结信号处理的生命周期前言这里即将要分享的信号,和之前分享的信号量是两个完全不相同的东西,就和老婆饼里没有老婆一个道理;

2022-05-01 21:48:21 325 21

原创 【操作系统基础】分段和分页

前言分段和分页的出现:就是为了解决以前操作系统设计管理内存方案带来的问题而设计出的一种新管理内存的方案;大概意思就是:一个进程不是完完整整的放入到连续的内存区域,而是把进程分段放入内存,因为把进程连续的放入内存带来的问题就是碎片问题很严重,所以分段放入内存就可以有效的缓解碎片问题;但是将进程分段放入内存,也会带来一个新的问题,这些分段的数据被放到哪里了?此时就需要操作系统维护一张表来记录了,这时候操作系统又会增加了新的负担,把进程分片,放入内存,计算内存哪儿有空位,计算表的数据等等等;但是

2022-04-29 08:06:39 5656 5

原创 【操作系统基础】OS管理内存的前置知识

初始内存(main memory)内存也是叫主存;内存是由一大段的字节序组成的,最关键的一点是这里每一个字节都有一个自己的地址;在计算机中,CPU是从内存的PC寄存器中获取指令地址来执行程序的;我们对内存的操作无非就是写入和读取,都是对内存的操作,如何操作内存呢?那就是操作它的地址,比如写入数据到内存,只需要找到你要写入内存的地址就可以达成目标;对于典型的指令执行周期来说:就是三部曲:CPU取指令form memory,CPU译码指令并且需要一些内存而外数据帮助译码;CPU执行执行,结果返回给内

2022-04-28 08:28:17 433 2

原创 【数据结构】二叉搜索树的代码实现(C++)

前言普通的二叉树的增删查改是没有任何意义的;所以当我们给树加以一些规则他就会发挥很大的作用;二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值; 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值; 它的左右子树也分别为二叉搜索树; 默认情况下二叉树排序树的数据是不可以有冗余的,相同的数据是不可以再二叉搜索树里;比如这颗二叉搜索树:二叉搜索树,又叫搜索二叉树,也叫二叉排序树

2022-04-25 19:45:17 2981 2

原创 【Linux】进程间通信--systemV标准--共享内存

文章目录systemV 标准共享内存通信原理共享内存的理解共享内存的创建--shmget函数查看共享内存和释放共享内存方式挂在共享内存--shmat函数去挂在共享内存共享内存使用的基本框架逻辑代码共享内存完成进程之间通信共享内存通信的特点systemV 标准systemV标准是大佬定制的一套标准,该标准可以在操作系统层面上,完成进程之间的通信;systemV标准给用户提供了系统调用接口,只要我们使用它所提供的系统调用就可以完成进程间的通信;对于systemV标准提供了三种方式:消息队列共享内存

2022-04-24 19:00:38 1979 3

原创 【Linux】进程间通信--管道(匿名管道和命名管道)

文章目录前言进程间通信的目的管道匿名管道管道特点在文件描述符角度理解管道前言进程间的通信,其实就是两个进程需要进行交流,从另一个角度上想:进程本身就是程序员给开辟的,所以进程间通信也就是程序员的通信;我们需要理解的是:进程通信是存在协同的场景的(也就是有顺序的场景);比如:cat test.c | wc -l 这条命令:就是把 cat进程的结果交给wc进程去执行,这就是先后顺序;但是我们知道进程之间是独立的,那么也就是说:不同的进程是看不到对方的资源的;这么来说既然独立,进程是如何通信的呢?

2022-04-23 15:49:56 3700 4

原创 【Linux】动静态库的制作和使用

文章目录gcc的静态链接编译和动态链接编译静态库的制作静态库的使用gcc的静态链接编译和动态链接编译首先我们得知道:gcc 默认编译是动态链接;gcc使用静态链接编译需要加参数static;准备源文件:mytest.c使用gcc 默认编译后,得到 mytest 可执行文件:使用 file 命令查看可执行程序mytest:发现使用的是动态链接:使用 ldd 命令可以查看可执行程序 ,mytest的动态链接库:假如gcc -static静态编译 源文件:mytest.c:那么就是

2022-04-18 15:58:13 2730 4

原创 【Linux】从文件系统的角度理解inode 理解软硬连接

文章目录前言Linux的ext2文件系统inode编号目录存储的内容理解软硬链接前言操作系统为了方便管理硬盘的空间,会将硬盘进行分区管理;比如在window中就是我们所说的C盘D盘等盘符;而 分区被分开后,需要载入文件系统才可以使用,文件系统是操作系统管理硬盘的一种软件的分层方式;Linux的ext2文件系统要了解文件系统,我们可以简单了解以下ext2文件系统的结构;Linux中使用的文件系统大多数都是ext2 ext3 ext4;这几种文件系统的管理方案基本相同,只不过细节上有些不一样;在L

2022-04-16 22:22:02 957 3

原创 【Linux】谈谈用户层缓冲区的问题

文章目录便准C的IO缓冲区标准C的IO接口缓冲区导致的一些现象解释便准C的IO缓冲区在C语言中,它的IO接口都是带缓冲区的;比如什么printf,fprintf,puts,putc,scanf,sscanf等;C语言的标准IO都是有缓冲区的;那它的缓冲区在哪呢?在FILE这个结构体中:有兴趣可以在Linux操作系统中:打开文件/usr/include/stdio.h里面可找到FILE的结构体:在/usr/include/libio.hstruct _IO_FILE {int _flags;

2022-04-14 12:13:01 854 4

原创 深入剖析C++实现多态的原理

文章目录前言有虚函数的类对象模型派生类继承有虚函数的基类的对象模型无虚函数派生类继承有虚函数基类的对象模型有虚函数派生类继承有虚函数的基类对象模型多态原理剖析汇编代码分析多态的过程有关多态的常见几个问题前言要理解C++的多态,必须先学会使用多态:多态的基本使用,我总结一篇文章:有需要可以看看【传送门】:谈谈C++多态的基本使用和总结有虚函数的类对象模型class Base {public: Base(){ cout << "Base::Base()的构造函数调用" &lt

2022-04-13 10:16:35 1503 2

原创 【操作系统基础】信号量的基本理解

文章目录1. 信号量2. 信号量的实现3. 二值信号量4. 一般信号量1. 信号量对于互斥锁,它解决的时并发进程竞争关系的问题,也就是为了解决临界区问题而设计出来的一种为了保持同步的工具;而信号量比互斥锁更加强大,可以解决很多并发进程同步的问题;一个信号量S是一个整数,除了初始化以外,信号量仅仅只能有两个操作:P和V操作;PV操作就是测试和增加的意思;2. 信号量的实现P操作主要是检测信号量S是否大于0,假如大于0,那么久使得信号量减1,假如小于等于0,那么就忙式等待,做空循环;V操作

2022-04-12 09:06:22 3634 5

原创 【操作系统基础】临界区问题 和 和原子操作的理解 和 互斥锁的实现和理解

临界区问题每个并发的进程都有一个代码段,被叫做临界区,这个代码段也是临界区可能会改变并发进程的公告资源数据,更新数据,写入文件等操作;在并发的进程中,当有一个进程正在执行临界区的代码时候,其他并发的进程是不可以被允许去执行临界区的代码的,换句话说:两个进程是不可以不可能同时执行临界区的内容;总的来说:临界区问题就是设计一种协议:这种协议它可以保证进程之间相互协作;进程进入临界区协议当我们一个进程需要进入临界区时候,需要获取进入临界区的许可,当我们离开临界区时候,需要归还临界区的许可;

2022-04-11 19:54:31 4198 4

原创 谈谈C++多态的基本使用和总结

前言文章目录前言多态构成多态的条件虚函数虚函数的重写(覆盖):多态调用虚函数的规则析构函数的重写(基类与派生类析构函数的名字不同)多态简单的说:多态就是根据你传入的不同的对象,去做同一样的事情,会有不同的结果和行为的表现产生;在C++中,传入不同的对象意思:给父类传入不同的子类;去做同一样的事意思是:父类指针或者引用调用了同一样的虚函数;产生不同的结果意思是:调用同样的虚函数,但是结果却不一样;构成多态的条件继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数;2.

2022-04-11 11:07:35 1972 2

原创 【操作系统基础】对文件系统的基础理解

文章目录文件系统概念文件概念文件的属性文件类型文件目录文件系统概念文件系统对于大多数用户来说,它是一个操作系统非常可视化的一部分;这里有个关键的信息,文件系统时操作系统的一部分,也就是说,文件系统其实就是软件层的虚拟东西;文件系统给计算机系统的所有使用者和操作系统的数据和程序提供了一个在线存储和访问的机制的东西;文件系统是在设备上面的,比如磁盘,SSDs上,文件系统是不会放到内存中的,因为断点了,那文件系统就会没有了;总结:文件系统包含了两个不同的部分:1.文件的集合,每个文件都存储相关的

2022-04-10 17:17:00 1265 1

原创 【操作系统基础】磁盘结构的基本理解

文章目录磁盘结构磁盘格式化进程请求磁盘IO并发进程请求磁盘IO磁盘结构主轴:磁盘片是绕着主轴旋转的磁头:用于读写磁盘片上面的数据磁盘片:存放数据的我们还发现,磁头不止一个,每个磁头都对应这一个盘面。磁盘格式化磁盘格式化:就是给磁盘重新分配一个文件系统,文件系统是os的概念;一般不同的os使用的文件系统是不一样的;这就像每个人的房子不一样,装修不一样的风格;进程请求磁盘IO当我们进程无论什么时候从磁盘中读写数据时候,它都需要向操作系统发出一个系统调用。进程请求磁

2022-04-10 16:29:23 1172

原创 简要谈谈C++ 类的成员函数中的 重载 覆盖(重写) 和 隐藏 的区别

重载就是函数重载:作用域:同一个作用域;在类中体现为在一个类中;函数名:相同;参数:个数不同,顺序不同,类型不同;返回值:不关心是否相同;virtual关键字:不关心是否有virtual关键字;覆盖就是派生类的成员函数覆盖了基类的成员函数:作用域:不同作用域;在类中体现为:父子关系的类;函数名:相同;参数:相同;顺序个数类型都必须相同;返回值:相同;virtual:父类必须有virtual关键字;隐藏就是派生类继承基类同名函数将起基类同名函数给屏蔽了: 只要函数名相同就是派生类就

2022-04-10 08:37:20 686 2

原创 从内存的角度窥探C++多继承中的菱形继承问题

文章目录1. 什么是菱形继承2. 菱形继承会带来什么问题3. 虚继承的方式解决菱形继承数据冗余和二义性的问题4. 通过内存窥探菱形继承的对象模型1. 什么是菱形继承菱形继承就是继承的方式长得像个菱形而已,它是多继承中一种比较特殊的存在;比如下面的类关系之间的设计:student 和 worker 类 继承了 person 类,而 undergraduate 继承了 student 和 worker 这两个类;这个继承的图很像菱形,咋们说它是菱形继承;2. 菱形继承会带来什么问题菱形继承会带来

2022-04-08 23:51:02 504

原创 简要谈谈C++继承中派生类的 构造 拷贝 赋值 析构的调用问题

文章目录继承体系派生类的特殊函数调用规则演示验证派生类调用父类的构造和赋值运算符总结:继承体系派生类的特殊函数调用规则C++中有如下规则:基类有默认构造函数,派生类假如不显示调用基类的默认构造函数,那么派生类的构造函数会自动调用基类的默认构造函数;假如基类没有默认构造函数,那么派生类必须显示的去调用基类的其他构造函数;派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。假如派生类不调用基类的拷贝构造就会报错派生类的operator=必须要调用基类的operator=完成基

2022-04-07 16:25:31 1228 1

原创 简要谈谈C++继承关系和访问限定符的问题

继承关系和访问限定符在C++继承的方式有三种,和访问限定符使用的关键字一样;但是它们的内涵是不一样的;我们经常会搞混继承方式和访问限定符之间的关系,当一个派生类通过这三种方式继承了父类,父类中的成员访问限定符也会起作用;它们之间的联系是什么呢?在派生类中继承基类成员访问方式的变化注意: 一旦我们派生类继承了基类,在派生类中是否可以访问到基类的成员是由继承方式和基类的访问限定符有关系决定的;在派生类中:是否可以访问到基类,可以通过下表查询;但是这派生类中,有9种关系,是否可以访问到基

2022-04-06 16:26:16 1025

原创 【Linux】从系统层面上深入理解文件描述符fd 和 理解一切皆文件 和 重定向原理 和 dup2的基本原理和使用

文章目录前言系统调用I/O接口open函数的参数的理解和和使用前言我们知道我们平时使用的文件操作,如C语言C++或者JAVA等语言,都会封装自己的对文件操作的函数接口,供我们对文件进行操作;而实际上,当我们使用这些文件操作的函数接口时候,本质都是访问硬件设备(磁盘);一个硬件设备是如何被函数接口的调用访问到的呢?当然是通过操作系统,操作系统是管理硬件设备的;所有语言所封装的文件操作接口,都必须通过操作系统的允许,才可以访问到磁盘这个硬件设备,而操作系统是不相信任何用户的,所以为了能够得到操作系统的允

2022-04-05 21:53:54 2574 9

原创 谈谈C++中非类型模板参数 模板的特化(全特化,偏特化)

1. 非类型模板参数模板参数分类类型形参****与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。比如在C++11的array使用了非类型模板参数:注意:1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的;2. 非类型的模板参数必须在编译期就能确认结果;2.非类型模板参数应用场景有时候,我们希望有一个静态的数组,或者存放数据

2022-04-01 16:57:25 1428 2

原创 模拟实现C++中stack和queue

stack 和 queue对于这两个特俗的结构两说,它们不是stl的容器部分,只是容器的适配器;它们的实现,依赖于容器,也就是底层数据类型为容器;由于它们的操作非常简单,并且代码也很容易实现,我就直接书写出看看就好;注意一个:就是我们stack和 queue的成员数据类型也是一个模板。所以说,该成员数据类型必须支持stack 和 queue里面的操作,才可以完成stack的实现;stack的模拟实现#pragma once#include<deque>//栈的第二个模板参

2022-03-31 16:18:15 350

原创 模拟实现C++中priority_queue

文章目录priority_queue的介绍构造函数的基础使用priority_queue的模拟实现测试接口代码priority_queue的介绍优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。函数接口接口说明priority_queue()/pri

2022-03-30 16:27:13 1401 1

原创 【Linux】进程控制(exec函数族)的理解和使用

进程程序替换是什么我们直到一个进程被创建出来,OS会给它分配进程PCB,mm_struct,页表等信息,同时会将程序的代码和数据加载到物理内存是吧;而进程程序替换就是:正在执行的进程本身的pcb,mm_struct,页表等信息不会发生改变,仅仅把一个新的程序代码和数据替换了原来进程的代码和数据;这就是进程程序的替换;如下图:我们有个进程,在执行中,如果发生进程程序替换,只不过事把该进程的代码和数据从磁盘加载到了物理内存罢了,其他信息不会变化;进程程序替换并不会创建新的进程,它只会加载程序的代码

2022-03-27 22:37:30 7566 3

原创 150. 逆波兰表达式求值(C++)

文章目录150. 逆波兰表达式求值思路--栈解决150. 逆波兰表达式求值150. 逆波兰表达式求值思路–栈解决class Solution {public://逆波兰表达式运算的思路://碰到数字就入栈;//碰到运算符就出两个数字运算,再把结果入栈 int evalRPN(vector<string>& tokens) { stack<int> st; //入栈数字的栈 //遍历表达式tokens数组

2022-03-24 19:49:33 2274 2

原创 剑指 Offer 31. 栈的压入、弹出序列(C++实现)

剑指 Offer 31. 栈的压入、弹出序列剑指 Offer 31. 栈的压入、弹出序列思路class Solution { //思路是:遍历入栈数组pushed,和弹栈数组popped,用一个新的栈pushSt来做中间层,用来模拟出栈和入栈是否匹配成功;就是pushed数组入栈pushSt,而popped数组向前走遍历就类似出栈pushSt //只要是满足,遍历完弹栈数组poped,那么就表示模拟成功,该序列弹栈poped数组是合法的public: bool val

2022-03-23 15:32:34 974 1

原创 模拟实现C++中list的常用方法

文章目录前言list的结点结构list的正向迭代器设计:list的反向迭代器的设计list模拟实现的代码前言其实STL里的list就是一个带头双向循环链表,实现起来并不是很困难,我们关键要理解,这里list的迭代器实现,同时和反向迭代器复用正向迭代器实现的原理即可;list的结点结构//链表结点 template<class T> struct ListNode { //构造函数: ListNode(const T& date = T()) :_Prev(nu

2022-03-23 14:24:04 671

原创 53. 最大子数组和(C++实现)

文章目录53. 最大子数组和思路1--贪心思路2--动态规划53. 最大子数组和53. 最大子数组和思路1–贪心由于要求最大子数组的和,并且连续的,我们就可以通过贪心一直获取数据,一旦发现,加上数组元素结果和为正数,说明接下来继续选取数据有可能使得结果和是更大的值,一旦发现,加上数组元素是结果和是负数,那么我们就可以去掉之前区间的和的值,重新选取新区见继续贪心下去;class Solution { //贪心: //思路:只要遍历找一直加,一旦加到数字为负数,那么就跳过该序列

2022-03-22 11:01:21 1881

C++中STL的基本用法总结

C++的STL string vector list stack queue set map 等常用的容器使用

2022-03-02

空空如也

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

TA关注的人

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