自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++中基础易混知识点-----static修饰不同数据时的不同作用

修饰局部变量-静态局部变量没有static修饰的局部变量源代码及运行结果#include<stdio.h>#include<windows.h>void test(){有static修饰的局部变量源代码及运行结果总结static修饰局部变量时,将使得局部变量“i”的作用域由局部变为全局,生命周期从“test”程序结束变为“全部程序”结束。...

2020-10-12 15:21:50 159

原创 【C++ STL学习】---map与set须知的使用细节

目录序列、关联式容器pair(K-V)简单用法set与multisetmap与multimapmap和multi的insert函数的差异map如何做到支持[]访问的?multimap为什么不支持[]?练习例题模拟实现序列、关联式容器序列式容器:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器:set、map、multiset、multimap,也是用来存储数据的,与序列式容器不同的是

2021-06-03 13:40:00 276

原创 【C++】多态以及多态原理

目录

2021-05-10 20:12:31 250 1

原创 【Linux】---互斥与同步、死锁与饥饿、实现生产者消费者模型、常见锁类型

目录梳理前言互斥与同步互斥量与条件变量信号量线程池死锁与饥饿死锁条件避免死锁避免饥饿常见特殊锁乐观锁悲观锁自旋锁读写者锁公平与非公平锁梳理前言进程线程间的互斥相关背景概念:临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。死锁:两个或两个以上的进程(LWP)都在等待互相释放自

2021-05-06 17:14:10 567

原创 【Linux】---线程池

什么是线程池?所有的池化技术,都可以看作一种缓冲区,举个生活中的例子,蓄水池、大坝之类。大家想想这些蓄水池的作用是什么?而线程池就是组织一批线程,在适当时机,按分配顺序去依次完成到来的任务。为什么有线程池?线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。(指PCB)线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络

2021-05-06 16:42:20 157

原创 【Linux】--- 多线程概念

目录线程互斥与同步死锁与饥饿线程互斥与同步死锁与饥饿

2021-05-05 16:03:26 189 1

原创 【Linux】---进程描述和控制

目录

2021-05-04 16:30:38 129

原创 【C++】继承以及菱形虚拟继承(virtual修饰)解析

目录前言:面向对象(OO)三大特性继承前言:面向对象(OO)三大特性继承

2021-05-02 16:30:22 410 1

原创 【C++STL学习之路】---stack、queue、priority_queue、deque、Adapter。

目录栈队列双端队列优先级队列设计模式:适配器模式栈队列双端队列优先级队列设计模式:适配器模式

2021-04-22 19:07:34 219

原创 【C++ STL学习之路】 ---list重点以及模拟实现

list的迭代器迭代器失效模拟实现

2021-04-15 21:53:35 123

原创 【Linux】---------信号知识点合集

目录0.什么是信号?1.Linux信号信号概念信号列表信号处理2.Linux信号产生3.Linux信号阻塞4.Linux信号处理信号捕捉0.什么是信号?1.Linux信号信号概念信号列表信号处理2.Linux信号产生3.Linux信号阻塞4.Linux信号处理信号捕捉...

2021-04-12 22:00:17 291 1

原创 【C++ STL学习之路】 ---vector必须熟知的底层原理(面试常考)

目录

2021-04-10 21:57:51 690 3

原创 【Linux】面试常考---进程间通信

目录

2021-04-08 14:10:09 1366 1

原创 leetcode:17. 电话号码的字母组合

题目:17.电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]//来源:力扣(LeetCode

2021-04-06 12:09:18 104

原创 【Linux】文件管理系统解析(I/O与缓冲区,文件描述符fd,iNode)

目录文件文件操作C++文件操作与C文件操作的关系I/O与缓冲动态库静态库文件文件操作C++文件操作与C文件操作的关系I/O与缓冲动态库静态库

2021-04-05 18:21:51 768

原创 【C++ STL学习之路】---------string

目录string是什么?C语言中的字符串标准库中的string类**总结:**为什么要定义string?string怎么用?string的相关习题string是什么?C语言中的字符串C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。标准库中的string类2.1 string类string类的文档介绍字符串是表示字符序列的类

2021-03-30 16:47:59 156

原创 【C++ STL学习之路】模拟实现string

目录借用我们老师说的一句话,模拟实现造轮子,不是为了写出更好的轮子,是为了让我们更了解底层,日后使用更加得心应手,即使出错,也能快速的找出错误所在。模拟实现中需要注意的细节都写在注释里,不再赘述。#pragma once#pragma warning (disable:4996)#include<assert.h>#include<iostream>namespace zt{ class string { public: //构建空字符串的写法 /*str

2021-03-30 16:47:07 99

原创 【C++】深浅拷贝

目录浅拷贝深拷贝代码示例:浅拷贝示例深拷贝示例总结附:代码浅拷贝浅拷贝就是只是拷贝值,不涉及空间上的复制。图解:深拷贝创建与被拷贝对象相同大小的空间,并且把里面的内容拷贝过去。代码示例:浅拷贝示例默认生成的拷贝构造和“=”,可以看到S1,S2,S3指向了同一块空间。在退出时,一旦析构释放了同一块内存空间,报错。深拷贝示例显而易见,可以看到S1,S2,S3指向了三块空间。运行成功总结当涉及动态内存开辟的时候,要采用深拷贝,如果仅仅需要拷贝值,不需要新的空间采用浅拷贝。

2021-03-30 10:25:03 125

原创 剑指 Offer 04. 二维数组中的查找

目录题目思路源码题目剑指 Offer 04. 二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26,

2021-03-20 20:45:48 139

原创 剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字题目思路代码题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems

2021-03-18 16:57:27 90

原创 【linux】-----进程等待辨析,进程替换解析。

目录进程退出进程退出场景进程常见退出方法异常退出:_exit函数exit函数exit与_exit的区别return退出进程等待为什么要有进程等待?什么是进程等待?怎么用进程等待?wait方法waitpid方法两者用法区别获取子进程status使用示例状态查看小tips阻塞式等待非阻塞式等待注意进程替换为什么要有进程替换?什么是进程替换?替换函数函数解释命名理解示例如何进程替换?进程退出进程退出场景代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止进程常见退出方法正常终止(可以通过 ec

2021-03-16 20:21:23 987

原创 C++泛型编程:函数模板,类模板

泛型编程1. 泛型编程2. 函数模板2.1 函数模板概念2.1 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则3. 类模板3.0为什么要有类模板3.1 类模板的定义格式3.2 类模板的实例化1. 泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){int temp = left;left = right;right = temp;}void Swap(double& left,

2021-03-12 21:20:04 94

原创 C++面试常考:内存管理

C/C++内存管理1. C/C++内存分布2. C语言中动态内存管理方式2.1 malloc/calloc/realloc和free3. C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4. operator new与operator delete函数4.1 operator new与operator delete函数4.2 operator new与operator delete的类专属重载(池化技术)5. new和delete的实现原理5.1 内置类型

2021-03-12 20:04:48 327

原创 C++新手第五课----初始化列表,static修饰成员、友元、内部类。

目录再谈构造函数1.1 构造函数体赋值再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

2021-03-11 17:01:22 109

原创 剑指offer:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)思路:我们构造一个类,在类中用static修饰n和结果ret,在类的构造函数里面进行n++累计,rel+=n。加到n,就构造n个类,这样一来rel就是最终结果。但是由于后台测试用例,是一个一个来测试的,并不是一轮一轮来测试,每一个测试用例都会在上一个测试用例的基础上进行,所以要进行初始化。附:(rel和n可以被它本身所属类的其他对象访问,这也是static

2021-03-11 16:59:03 207

原创 C++新手入门第三课--重点1:类的大小如何计算?重点2:this指针

类与对象1.面向过程和面向对象初步认识不同点2.类的引入3.类的定义类的两种定义方式:4.类的作用域5.类的实例化6.类的访问限定符及封装7.类的对象大小的计算8.类成员函数的this指针1.面向过程和面向对象初步认识不同点C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。举个例子:假设我们要点外卖,对于点外卖这个需求,对于过程:选食物,下单,收到外卖。对于对象:顾客,商家,

2021-03-04 17:01:00 111

原创 内存对齐?是什么?为什么?怎么做?

结构体内存对齐规则第一个成员在与结构体偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的对齐数为8结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。【面试题】结构体怎么对齐? 为什么要进行内存对齐如何让结构体按照指

2021-03-04 16:53:58 101 1

原创 C++新手入门第二课---引用

C++入门第二课引用内联函数auto关键字(C++11)基于范围的for循环(C++11)指针空值---nullptr(C++11)引用内联函数auto关键字(C++11)基于范围的for循环(C++11)指针空值—nullptr(C++11)

2021-03-03 20:57:28 198

原创 我发现力扣第七题. 整数反转 的小漏洞!!!------附三种正确解法。

目录题目源代码及漏洞漏洞分析正确的三种解法解法一:用long类型解法二:用unsign int 类型解放三:末尾检测(官方题解)题目7.整数反转给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120

2021-03-03 20:24:12 238

原创 leetcode:581. 最短无序连续子数组--------时间复杂度O(n)空间复杂度O(1)的解法(不用栈)

题目:581.最短无序连续子数组解题思路思路一:思路二:图解:源代码性能分析给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2, 6, 4, 8, 10, 9, 15]输出:5解释:你只需要对[6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1, 2, 3, 4]输出:0示例 3

2021-02-24 16:55:45 170

原创 leetcode -------414. 第三大的数 C语言版本

目录题目解题思路图解代码题目414.第三大的数给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指第三大且唯一出现的数。存在两个值为2的数,它们都排第二。来源:力扣(LeetCode)链接:https ????

2021-02-18 17:01:07 483

原创 383. 赎金信 ---两种解法

目录题目解法一:字典计数法解法二:暴力消除法题目383.赎金信给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)注意:你可以假设两个字符串均只含有小写字母。canConstruct(“a”

2021-02-11 22:37:16 304

原创 leetcode:9.判断回文数 --------三种方法

目录题目解法一:转为字符串逆置法解法二:高低位同时消除法解放三:后半部分逆置判断题目9.回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x

2021-02-11 21:19:08 349

原创 leetcode第189题. 旋转数组----五种解法

目录189. 旋转数组解法一:暴力求解(依次旋转K轮)解法二:额外空间法解法三:三次翻转解法四:环状替换189. 旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,

2021-02-09 15:53:11 3891 2

原创 冒泡排序C语言版,综合分析

冒泡排序冒泡排序思想冒泡排序算法性能冒泡排序算法稳定性冒泡排序思想思想:假设我们排升序在一个数组arr[ ]中,数据个数确定,n个数据,从第一个开始,把第一个当作比较依据,我们挨个往后两两比较,找到比当前数大的就交换,小于等于的就拿下一个数字作为下一次的比较依据,这样直到两个数字比较完,把最大数排到最后,成功排出最后一个最大数字,下一次整个比较变为n-1。直到要比较的数字个数变为1,所有的数字都排完序。图示:冒泡排序算法性能冒泡排序算法稳定性...

2021-02-07 18:49:11 241

原创 fork函数辨析

fork函数如何创建进程?fork函数使用附:linux手册描述如何创建进程?fork函数使用先认识这两点即可fork有两个返回值父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)第一点验证代码:运行结果:第二点验证代码:运行结果:如何理解复制代码,数据私有呢?附:linux手册描述NAMEfork - create a child processSYNOPSIS#include <unistd.h> pid_t fork(void)

2021-02-07 17:49:25 256

原创 C++第四课 ---类的六个默认成员函数

六个默认成员函数构造函数析构函数拷贝构造函数赋值操作符重载默认拷贝构造与赋值运算符重载的问题const成员函数构造函数析构函数拷贝构造函数赋值操作符重载默认拷贝构造与赋值运算符重载的问题const成员函数...

2021-02-05 19:58:51 202

原创 C++新手入门第一课

C++入门0前言1、命名空间1.1命名空间定义1.2命名空间使用2、输入输出3、缺省参数3.1缺省参数概念3.2缺省参数分类3.3缺省参数使用注意4、函数重载4.1函数重载概念4.2名字修饰0前言1、命名空间1.1命名空间定义1.2命名空间使用2、输入输出3、缺省参数3.1缺省参数概念3.2缺省参数分类3.3缺省参数使用注意4、函数重载4.1函数重载概念4.2名字修饰...

2021-02-01 15:06:00 467 1

原创 vim编辑多文件,多窗口,切换窗口,切换文件命令

目录一、打开多个文件:二、在文件之间切换:三、打开新窗口四、切换窗口vim打开多窗口、多文件之间的切换一、打开多个文件:vim还没有启动的时候:.在终端里输入vim file1 file2 … filen 便可以打开所有想要打开的文件.vim已经启动输入:e filename可以再打开一个文件,并且此时vim里会显示出file文件的内容。二、在文件之间切换:.文件间切换Ctrl+6 //两文件间的切换:bn //下一个文件:bp //上一个文件

2021-01-29 20:19:39 7236

原创 提交(commit)不写日志会发生什么?fatal:Unable to create“.../.xxx/index.lock“ 的错误解决办法

错误错误提示错误原因解决办法最后错误提示fatal: Unable to create '/home/zhoutao/git仓库/linux-/.git/index.lock': File exists.If no other git process is currently running, this probably means agit process crashed in this repository earlier. Make sure no other gitprocess is

2021-01-29 16:55:41 336

空空如也

空空如也

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

TA关注的人

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