- 博客(31)
- 收藏
- 关注
原创 C++ 左值引用和右值引用
c++引用类型详解左值引用引用是什么定义引用类型要注意的点const的引用右值引用左值引用引用是什么引用为对象起了另外一个名字, 引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名;例子:int ival = 1024;int &refval = ival; //定义了ival的引用,refval指向ival,是ival的另一个名字,所以说,引用即是别名int &refval2; // 报错;定义引用类型要注意的点引用类型必须
2021-01-13 18:20:15 394
原创 C++11迭代器专栏详解
c++迭代器详解迭代器介绍使用迭代器迭代器运算符迭代器类型迭代器运算chapter 9迭代器再探迭代器插入迭代器iostream迭代器反向迭代器五类迭代器迭代器介绍迭代器可以使用下标运算符来访问string对象的字符或vector对象的元素,所有标准库容器都可以使用迭代器,但是其中只有少数的几种菜同时支持下标运算,类似于指针类型,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是容器中的元素或者string中的字符,使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另一个元素。迭代器有有效和无效
2020-12-04 17:50:43 1035
原创 差分&&差分矩阵——C++
差分输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤1000输入样例:6 31 2 2 1
2020-11-27 21:30:41 747
原创 前缀和算法——一维前缀和&&二维前缀和
一维前缀和输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 32 4输出样例:3610#
2020-11-27 21:27:17 419
原创 快速排序——C++
#include <iostream>using namespace std;const int N = 1e6 + 10; int n = 0;int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) { return; // 判断边界,如果区间里面只有一个数或者没有数就直接返回 } int x = q[l], i = l - 1, j = r + 1; /
2020-11-27 21:23:04 199
原创 离散化——求区间和
离散化——求区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所求的区间内数字和。数据范围−109≤x≤109,1≤n,m≤105,−109≤l≤r≤109,−1
2020-11-27 21:20:14 369
原创 二分算法——c++
#include <iostream>bool check(int);// 区间[l, r]区间被划分成[l, mid - 1], 和 [mid, r]时int bsearch_1(int l, int r){ while (l < r) { int mid = (l + r +1) >> 1;// 上取整; if (check(mid)) { l = mid; } else {
2020-11-27 21:18:10 273
原创 初识C++函数重载
文章目录函数重载什么是函数重载为什么要函数重载函数重载中要注意的一些细节函数重载与作用域函数匹配【重载确定】重载和const形参const_cast和函数重载函数重载什么是函数重载函数重载是指在同一作用域内,函数名相同而形参列表不同的一组函数。编译器首先将调用的实参与重载集合中每一个函数的形参作比较,然后根据比较的结果决定调用哪一个函数。为什么要函数重载重载函数通常用来命名一组功能相似...
2020-02-02 21:55:31 437
原创 C++类型转换详解
文章目录类型转换隐式类型转换会发生隐式类型转换的情况:算数转换显式类型转换类型转换在C++语言中,某些类型之间是有关联的,如果两种类型有关联,那么它们就可以相互转换,同理,如果两种类型可以相互转换,那么它们就是有关联的。在C++语言中,类型转换被分为隐式类型转换和显式类型转换。隐式类型转换隐式类型转换:由编译器根据类型转换规则设法将运算对象的类型统一,编译器自动执行,无需程序员的介入。...
2020-01-28 21:14:25 738
原创 C++中auto类型说明符和decltype类型指示符
文章目录auto类型说明符复合类型常量和autodecltype类型指示符decltype和引用auto类型说明符编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式的类型,为了解决这个问题,C++11新标准引入了auto类型的说明符,用它就能让编译器替我们分析表达式所属的类型。auto让编译器通过初始值来推算变量的类型,显然,auto定义的变量必须有初始值。使用a...
2020-01-21 15:37:58 180
原创 C++中的const限定符详解
文章目录const限定符初始化和constconst的引用指针和const顶层const和底层constconst限定符我们希望定义这样一种变量,它的值不能被改变。因为const对象一旦创建后其值就不能在改变,所以const对象必须初始化,初始值可以是任意复杂的表达式。初始化和const与非const类型的对象所能参与的操作相比相比,const类型的对象能完成其中的大部分,主要的限制在于只...
2020-01-21 14:09:22 437
原创 多维数组
文章目录数组数组是什么?多维数组数组元素的地址计算数组数组是什么?《C primer plus》上面对数组的定义是:数组由数据类型相同的一系列元素组成。但由于这本书面向C语言入门读者,对于深入学习的我来说,不得不继续深入思考数组到底是什么,下面是我自己对于数组的认识:从数组ADT的逻辑结构来看:数组的逻辑结构是线性的,也就是说,数组元素之间的关系为线性关系。从数组数据元素的存储方面来看...
2019-10-17 12:37:48 758
原创 KMP模式匹配算法next数组值的推导详解
继上一篇关于模式匹配算法的博文,我想在这里在继续详细解说一下next数组和nextval数组值的推导。文章目录为什么需要next数组为什么需要next数组next数组到底是用于什么的?为什么要有next数组?在这里我们用next数组来记录模式串各个位置的j值变换。让我们用一个例子来说明上述概念:假设主串S=abcdefgab匹配串为T=abcdex如果我们按照BF模式匹配算法来处理...
2019-10-14 20:00:25 1870
原创 模式匹配算法
文章目录串运算的概念浅析串大小的比较:Brute-Force算法KMP算法KMP算法的改进串运算的概念浅析模式匹配:子串的定位操作被叫做串的模式匹配。串大小的比较:串相等:串长度相等且各个对应位置的字符都相等。当两个串不相等时,判断两个串大小的方法:给定两个串:S1 = “a1a2a3a4…an”和S2 = “b1b2b3b4…bm”,当满足以下条件之一时,S1<S2。n&l...
2019-10-13 21:04:01 867 2
原创 关于进程管理(一)的小实验以及疑问解答
首先,来回答上一个小节遗留下的一个问题:为什么说ps是静态的,而top是动态的,解释如下:ps:将某个时间点的进程运行情况撷取下来top:相对于ps...
2019-09-18 03:07:56 357
原创 Linux 下tty浅析 (一)
ttytty的基本概念tty(通常用tty来简称各种类型的设备)一词源于Teletypes,原来指的是电传打印机。电传打印机:后来有了键盘和显示器,所以叫做终端比较合适。在早期计算机时代,小型机主机的显卡显示器和键盘就是控制台,这是人控制主机的第一人机接口;同时小型机还需要提供多个终端给多个人接入主机,终端有字符哑终端和图形终端两种,字符哑终端就是tty。回到现在的pc时代,个人计算...
2019-09-18 02:15:11 3876 1
原创 进程管理(一)进程与程序&&静态的ps详解
在这个小专题我想要详细的来谈一下进程管理;要谈进程管理,我们首先应该明确:进程与程序之间的关系其次才是进程管理什么是进程在Linux系统中,触发任何一个事件,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时根据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置。上面的描述我们乍一看是没有什么问题的,并且也相当容易理解,那么,在Linux系统中,“触发一...
2019-09-17 03:09:08 312
原创 win10更新后ubuntu,deepin引导消失如何解决
首先,我真的想要感叹一下,win10好生一个“流氓软件”,大家都懂的,唉!白天被强制更新了win10以后,刚才切换系统的时候才发现我的ubuntu的引导消失了,无论是重启还是关机后开机,都是直接进入了win10,并没有按照预想的进入ubuntu的引导界面,接下来我来说一下,这种情况应该如何解决;第一步首先重启进入BIOS界面,检查secure boot选项,如果是enebled那么就改为di...
2019-09-17 00:18:54 1386
原创 仿照redis源码的Adlist双端链表实现一个自己的双端链表(1)
文档均在代码中注释,解释请看代码#ifndef FERI_LIST_H#define FERI_LIST_H/*普通结点*/typedef struct feri_listnode { struct feri_listnode *pre; struct feri_listnode *nex; void *value;} feri_listnode;/*迭代器*/...
2019-09-14 21:20:48 153
原创 时间复杂度详解
一个程序的优劣主要取决于其运行时间,除去一些我们无法处理的因素(所使用的编译器,计算机的硬件配置)以外,剩下的最主要的因素则是所使用的算法以及对该算法的输入。那么一个算法的优劣我们应该如何评判呢?别着急,继续看下去。本片博文讲从一下几个方面来向大家说明什么是时间复杂度以及我们为什么需要时间复杂度:数学基础模型要分析的问题运行时间的计算运行时间中的对数数学基础估计算法资源消耗所...
2019-09-14 16:12:13 2678
原创 epoll编程接口(上)
epollAPI是Linux系统专有的。epollAPI的核心数据结构称作epoll实例,它和一个打开的文件描述符相关。这个文件描述符不是用来做IO操作的,相反,它是内核数据结构的句柄,这些内核数据结构实现的目的有两个:记录了在进程中声明过的感兴趣的文件描述符列表维护了处于IO就绪状态的文件描述符列表epollAPI由以下三个系统调用组成:创建epoll实例:epoll_create(...
2019-08-07 17:11:11 239 1
原创 基于C实现一个可复用的一维线程池
刚开始调整代码风格,有些地方格式还不是很规范,可参考Linux内核源码的代码风格;我就在这里不多做解释了,如果对哪一步有疑惑,我们可以在评论区讨论,如果有写的有问题的地方,也希望大家不吝指教。话不多说,先上代码:所有的头文件:#include <stddef.h>typedef struct Queue Queue;Queue *Queueinit(void);voi...
2019-08-06 10:32:17 186
原创 线程同步之互斥量
线程同步首先,我们要明确互斥量和条件变量是线程用来同步彼此行为的两个工具。众所周知,线程的主要优势在于可以通过全局变量来共享信息,但是在共享信息的时候必须满足以下两个条件:必须确保多个线程不会同时修改同一个变量某一个线程不会读取正由其他线程修改的变量。保护对共享变量的访问:互斥量术语临界区是指::访问某一共享资源的代码片段,并且这段代码的执行应为原子操作,也就是,同时访问同一共享资...
2019-08-03 11:52:00 245
原创 线程入门
概述:线程是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程,同一程序中的所有线程均会独立执行相同的程序,并且共享同一份全局内存区域,包括初始化数据段,未初始化数据段,以及堆内存段。进程相比于线程:进程间信息难以共享。除去只读代码段外,父子进程并未共享内存,因此必须采用一些进程间通信方式,在进程间进行信息交换。fork()一个进程的代价比较高。线程之间能够方便,快速的...
2019-08-02 15:46:23 116
原创 菜鸟学内存后感悟篇1
由于后续的学习需求,我需要提前预习一些有关内存的知识,在这里,我主要是想理清楚预习过程中所收获的知识以及我遇到的问题以待后续解决(有疑惑的地方我会用彩色标出),其中内容不可作为学习参考,仅限于和我一样的菜鸟可以大致浏览后与我交流想法,如有不对的地方,还请各路大神不吝指正。首先,我想从CPU谈起,众所周知,cpu是一台计算机的核心,CPU像是一台计算机的大脑一样,作为最高级的指挥官来处理来自于计算...
2019-07-23 14:17:50 263 1
原创 初步认识Linux的文件系统
本章重点:如何创建文件系统,包括分区,格式化与挂载等认识Linux文件系统文件系统的特性整块磁盘的物理组成主要有:圆形的碟片;机械手臂,以及在机械手臂上的磁头;主轴马达,可以转动的碟片,让机械手臂的磁头在碟片上读取数据;扇区为最小的物理存储单位,且依据磁盘的设计不同,目前主要有512B和4kB两种格式;将扇区组成一个圆,那就是柱面;早期的分区主要以柱面为最小分区单位,现在的分区...
2019-05-26 16:03:31 164
原创 15,17,18级面试题总结
小组15,17,18级面试题总结c预处理器和c库一个程序从源代码到可执行程序的过程一 预编译1.删除所有的#define,展开所有的宏定义。2.处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。3.处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。4.删除所有的注释,“//...
2019-05-16 22:14:04 202 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人