自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 socket编程

简单的tcp,udp代码

2022-09-01 15:10:00 291 1

原创 网络基础

草草概念

2022-08-19 09:44:48 558

原创 多线程的理解

线程,线程和进程的关系,生产消费模型,线程的接口,生产消费模型,单例模型,线程安全可重入概念,自旋锁

2022-08-18 09:54:20 294

原创 特殊类的设计

在堆上创建对象,在栈上创建对象,设计不能继承的类,单例模式,迭代器模式...

2022-08-11 09:04:54 114

原创 C++11

lambda表达式,列表初始化,右值引用移动语义等,线程库,智能指针等

2022-08-10 14:48:40 67

原创 异常的了解

C++的异常如何使用,处理错误,C++处理异常体系,优缺点

2022-08-10 07:38:29 58

原创 信号的理解

信号的介绍,为什么发怎么发,可重入函数,volatile

2022-07-23 13:41:52 358

原创 高阶数据结构之并查集

并查集是什么,使用,相关OJ

2022-07-17 14:25:54 167

原创 哈希(解决哈希冲突,封装map/set,哈希的应用{位图/布隆过滤器})

C++哈希的内容

2022-07-11 22:02:40 357

原创 map 和 set

map和set容器:序列式容器:vector,list… (其中栈和队列不算是序列式,属于的是适配器)关联式容器:map和set(底层是平衡搜索树)…set的底层是搜索树set就是key的模型,判断在不在官网看set模板声明(内有仿函数,空间配置器)序列式容器一般使用的是push和pop,关联式容器一般使用insert和erase遍历set:迭代器 和 范围for(我们知道底层,其实范围for的底层也就是迭代器)迭代器左闭右开遍历的过程看起来和序列式容器类似,但是底层其实已经千差万别了

2022-07-09 13:54:49 120

原创 AVL树的理解和实现

AVL树,也叫高度平衡二叉搜索树左右子树都是AVL树左右子树高度差(简称平衡因子)的绝对值不超过1(-1/0/1)平衡因子 = 右子树高度 - 左子树高度AVL树不一定需要平衡因子使用平衡因子是一种控制实现方式三叉链存储,有一对pair和平衡因子插入有一个parent,有一个cur插入的是三叉链,parent也要指怎么知道平衡不平衡新插入的 平衡因子一定是0插入在父节点的右边,父节点的平衡因子+1;插入在左边,父节点平衡因子-1cur是新增结点,它只会影响cur节点的平衡因子控制

2022-05-29 23:39:15 110

原创 基础IO(文件描述符,理解文件系统,动静态库)

1.文件操作符①回顾C语言文件操作打开文件fopen向特定的文件写入我们的字符串然后我们实践一下基本的文件输入读文件我们在C语言中用的是fgets我们可以将文件中的内容给读出来r是读,w是写,注意一下a是追加,可以在w的基础上继续写,写入和追加是由区别的②加深理解C语言默认会打开三个输入输出流,stdin ,stdout, stderr类型是FILE*说明就是C语言给我们提供的stdin对应的硬件设备:键盘stdput对应的硬件设备:显示器stderr对应的硬件设备

2022-05-23 09:15:35 334

原创 二叉搜索树(基础)

二叉搜索树(BinarySearchTree)所有左子树的值都小于根,所有右子树的值都大于根用处:在内存中查找最多查找高度次如果能做到满二叉树或完全二叉树,在中国14亿人中找到心动的人只需要31次,10亿是30次(2的三十次方)查找的话:需要后期的平衡二叉树,和AVL树搜索二叉树中序遍历时一定程度上是有序的,所以又被叫做排序二叉树比较数据的大小,我们在声明模板的时候一般申请成key - --class KInsert操作先序遍历可以排序+去重查找Find也很简单删除操作...

2022-05-16 11:19:51 193

原创 继承和多态

一 .继承1 .继承的本质继承的本质是复用,继承是类设计层次的复用基类/父类(大家都有的信息提取到一个类中)子类/派生类定义格式 class Student(派生类) : public(继承方式) Person(基类)基类private成员在派生类中无论什么方法继承都是不可见的,语法上限制派生类对象在类里和类外都不能访问它保护和私有在父类中没有区别在子类中,private成员不可见,protected是可见的实际中一般都是使用public继承,几乎很少使用private和protected

2022-05-08 09:22:22 294

原创 IO流(C语言,C++)

IO流linux下叫终端,VS下叫控制台一张继承图,cin是istream的对象,cout是ostream的对象cin>> ->cin.operator>>()cin比scanf慢的原因是底层封装太多,做的太笼杂了,跟编译没有关系cin是如何做到连续的输入多个数?多个函数调用,返回值有关真正的优势是,cin,cout可以重载自己想要的类型1 .operator bool()OJ多种输入,while(cin>>str){}C语言while(scan

2022-05-03 17:34:02 768

原创 进程控制(退出&等待&程序替换&简单shell的实现)

1.进程终止

2022-04-27 22:19:00 1072

原创 vector

vector的本质是一种顺序表,难度不大,但需要我们重点掌握1 .vector的初始化方式#pragma once#include<cstdio>#include<vector>#include<iostream>using namespace std;int main() { vector<int> v1; vector<int> v2(10, 8);//初始化10个8 vector<int> v3(++v2.b

2022-04-12 22:56:01 141

原创 进程地址空间

1.虚拟地址概念的引出我们在学习C++/C 的时候,学到的内存分布图是这个样子的我们接下来在Linux下用代码来验证一下查看一下一段代码和程序,看看可以发现什么有趣的结论奇怪了,同一块空间的数据竟然有两个不一样的值地址空间怎么可能没有发生变化?如果C/C++打印出来的是物理空间的地址,这种现象还存在吗?绝对不可能,所以说,我们在这里使用的是虚拟地址而不是物理地址2.进一步理解虚拟地址(为什么要有地址空间)每个进程都有地址空间,也就意味着操作系统要管理地址空间,除了管理PCB,也要

2022-04-01 14:38:08 183

原创 理解环境变量

先问问自己:为什么系统的命令不用带路径呢?环境变量1.查看环境变量直接echo PATH不可以,要加$符号系统查找的时候,以冒号为分隔符号,找不到第一个就去找第二个,找不到第二个就去找第三个,以此类推,找到了就直接跑起来导入环境变量记住用这种方式在后面添加,如果把之前的都修改了,也不用担心,这只是在内存级别的修改,只需要重新登录服务器即可配置过后,我们之前用./myproc当前路径的方式可以跑,直接myproc现在也可以跑了还有一种环境变量HOME为什么不同用户pwd的结果是不同的呢

2022-03-31 21:00:24 263

原创 进程的优先级

1.为什么要有优先级?资源太少,本质是分配资源的一种方式Linux中的优先级数据,值越小优先级越高PRI是优先级的初始值,NI是对PRI的一个修改参数(大小为负20到正19),也叫优先级的修正数据(nice值)PRI(new) = PRI(old) + NIUID是一个进程唯一标识的一个值2.调整优先级不要轻易自己去改PRI优先级,我们调整优先级,一般是调整NI这个值使用top命令按r键输入我们的pid, q退出,修改完后发现我们的PRI变成90了PRI的默认值是80,每一次t

2022-03-31 14:26:56 810

原创 Linux进程概念

1 .冯诺依曼体系结构CPU:中央处理器

2022-03-30 19:14:06 99

原创 STL -- String

预学先知1.STL的六大组件,容器,算法,迭代器最为重要,allocator就是个内存池2.STL是学习C++中一个很重要的方面,需要认真对待。“没有学过STL就不要说自己学过C++”; 三个境界:能用,明理,能扩展3 .辅助学习的网站www.cplusplus.com4.几个编码表ascii – 表示英文编码表unicode – 表示全世界文字编码表 utf-8 utf-16 utf-32gbk --中文自己量身定做的编码表Linux上一般设置utf-8根据编码的不同,也有不同的方式进

2022-03-29 16:08:26 1284

原创 gcc,g++ / gdb的使用 / make/Makefile/进度条/git

Linux编译器 - gcc/g++使用默认编译出来的文件名是 a.out./ 的意思是当前路径下复习一下四个步骤:1.预处理(进行宏替换)2.编译(生成汇编语言)3.汇编(生成机器可识别的代码)4.链接(生成可执行文件或库文件)①使用指令生成mycode.i文件(.i为后缀一般是预处理以后的文件)-E的意思是开始翻译,到预处理这个动作后结束打开预编译后的文件发现文件很大②同样执行gcc -S mycode.c -o mycode.s ,意思是“开始程序的翻译,完成编译以后,停止!

2022-03-03 09:33:23 823

原创 模板 ---模板进阶

模板一般分为函数模板和类模板函数模板#include<iostream>#include<cstdio>using namespace std;template<class T>void Swap(T& a, T& b) { T t = a; a = b; b = t;}int main() { int a1 = 1, a2 = 2; Swap(a1, a2); cout << a1 << "

2022-02-28 13:35:27 106

原创 栈和队列(初级)

介绍栈和队列栈定义:进行插入和删除的一端叫做栈底,另一端叫做栈顶,遵循先进后出,后进先出(Last In First Out)经典操作:压栈,出栈有两种栈,一种是数组栈,一种是链式栈,两种都可以,相比之下数组栈的效率更高下面是核心功能的实现头文件#pragma once#include<stdio.h>#include<stdbool.h>#include<assert.h>#include<stdlib.h>typedef int

2022-02-27 16:43:24 79

原创 系统安装工具yum

1.安装工具yum正常来说,我们在Linux下安装软件有三种方式①源码安装(繁琐,不建议)②rpm 安装 类似一个安装包 (比第一个好但是还是不建议)③yum : 本身会考虑依赖关系 ,类似于手机的应用市场(推荐)yum是是什么?是Linux下软件安装的一个客户端装软件不建议用root身份,普通即可,可以使用sudo命令sudo yum list 列出所有可以安装的软件用grep 可以过滤 下载某个软件例如: sudo yum instll -y sl执行:sl可以刨除一辆小货车

2022-02-25 21:41:47 723

原创 权限(2)

1 . chown 可以将文件的拥有者给别人(比如说普通用户下使用chown root xxx.txt就可以将xxx这个文件的拥有者变成root)还可能用到的命令:logout 退出登录sudo 短暂提升权限(需要T添加信任关系才可以使用)su - 切换成超级用户(需要输密码)想要改变所属组就使用chgrp 操作同上同级之间不接受的话可以提升 sudo 进行强制接受如果文件的所属人是你,那么当group是其他人时,不用sudo也可以自己改回来,但如果owner是别人,那就改不了总结:改变

2022-02-25 15:31:23 166

原创 C++内存管理

预学先知1.C/C++内存空间的划分函数调用建立栈帧 形参,局部变量等等语言语法命名角度,数据段就是静态区,代码段就是常量区堆:程序运行中按需求,申请和释放空间,比如在实现链表32位程序,栈一般是8M,静态区常量区不大,堆很大(2G左右)2 . 死循环会爆掉程序吗?不会。该程序一直会消耗cpu但不会消耗空间3 .分析哪些数据属于哪个程序答案是(横着看):CCCAAAAADABchar2是一个数组,会在栈上开5byte(有\0)空间,把数据段的数据拷贝过去*char2 ,ch

2022-02-21 10:34:51 453

原创 Vim入门

预学先知1 . IDE( Integrated Development Environment)例子:VS2019: 编译,调试,debug等五花八门的功能在一起Linux中可以安装IDE,但是我们不这么干,要学会在纯Linux下进行开发,学习一个个独立的工具2 . 什么是Vim?是一个文本编辑器,之恶能用来编写代码具体学习1.Vim下如何进行退出?进入vim 在命令行输入vim即可shift + “:” 进入下菜单 ,输入q/quit 进行退出2.vim是多模式编辑器有三种模式,

2022-02-20 15:29:26 615

原创 时间复杂度的理解

了解时间复杂度的概念

2022-02-14 22:16:57 211

原创 类和对象【超详细】

预学先知①面向对象和面向过程的初步认识C语言是面向过程,关注的是过程,分析步骤,利用函数调用解决问题C++是基于面向对象的,关注的是对象,将一件事拆成不同的对象,靠对象的交互完成例子:设计一个快递系统面向过程:关注实现下单,信息整合,送单的过程,体现到代码–方法/函数面向对象:关注实现类对象及类对象之间的关系,快递员,商家,用户之间的关系 --类的设计及类之间的关系②C++是基于面向对象:面向过程和面向对象混编。原因:C++兼容C然而JAVA是纯面向对象:只有面向对象③C++对结构体进

2022-02-14 16:09:45 369

原创 c++基础

学习一门新的语言,我们总体上要学习一下它的关键字1.C++关键字慢工出细活,不要求上来就全部掌握,在学习前看一下总体做到心中有数C++兼容C的特性2.namespace关键字为什么要提出这个关键字?因为C语言无法解决命名冲突问题①我们自己定义的变量和函数可能比库里面的变量重名冲突②当做到代码量比较大的项目的时候,队里两个人写的代码会产生命名冲突namespace域全局和局部同时的情况下,首先在局部找,再去全局找#include<iostream>#include<

2022-02-03 00:43:50 105

原创 深入理解权限

**预习先知**①广义上,Linux发行版 = Linux内核 + 外壳程序狭义上,linux = Linux内核一般我们说的都是广义上来看的②Shell作用:传递请求指令,让OS执行命令;保护内核③Shell可以创建子进程来执行具有风险的事情进程:程序运行起来就是一个进程,shell本身也是一个进程④shell和bash的关系是什么?可以理解为程序员和你(个人)⑤kill 命令关闭进程who查看服务器谁在线ps 查看进程su - 切换root身份,后面加name 切换用户

2022-01-28 12:36:54 2347

原创 邂逅Linux

初识Linus

2022-01-27 19:24:57 1463

原创 【精品贴】初级递归篇(C语言版)

这里列举了九道基础的递归,方便编程新手入门递归这个知识点,希望通过这八道基础的递归题,可以帮同学们对递归有更深的理解~1、求阶乘//递归和非递归求N的阶乘int Factorial1(int n) { //这是一种递归的写法 if (n == 1) return 1; return n*Factorial1(n - 1);}int Factorial2(int n) { //这是一种非递归的写法 int sum = 1; for (int i = 1; i <= n; i+

2021-12-15 21:25:17 728

原创 如何解决Visual Stuido2019 30天体验期过后的登陆问题

相信有很多小伙伴,点了登录就一直圆圈在动…接下来我来教大家处理一下这个小问题只需要两步十分简单第一,点击账户设置,将登陆选择改成系统web浏览器第二步,点击确定,再次点击登录会自动跳转到浏览器页面登陆如果你是联想浏览器登不进很正常将登录页面复制到微软自己的edge浏览器中即可登录祝你顺利,我是爱coding的Oliver,帮到了别忘了点赞哦~...

2021-11-30 13:30:53 509

原创 《三子棋》C语言数组应用 --n皇后问题雏形

C语言小白都可以上手的小游戏,我们一起来看看把~做完以后下次遇到数据结构的n皇后问题会容易理解多哦什么是**三子棋游戏**?一行或者一列或者对角线或者反对焦线上全是同一类型的棋子,则该玩家获胜,很容易做把,我们一起来试试!主要知识点:二维数组,for语句,switch语句,一点点时间戳的知识首先我们要设计要我们要使用的函数写出头文件"game.h"#pragma once#include <stdio.h>#include <time.h>#includ

2021-11-27 12:09:29 3468

原创 如何解决Visual Studio中scanf编译报错的问题

初次使用visual stdio的小白肯一定会遇到这样的问题我们应该如何解决这个问题呢1.第一步首先找到项目的属性2.找到选择预处理器,点击红色箭头所指的部分,点击编辑3.在预处理定义下加入如下代码**_CRT_SECURE_NO_WARNINGS**即可,点击确定PS:如果遇到系统异常的红字,记得把联想自带迈克菲的实时扫描关掉!...

2021-11-25 15:02:52 537 2

原创 C语言函数复习(传值传址【二分查找】,递归【阶乘,汉诺塔等】)

函数函数的传值调用函数的形参和实参占用不同的代码块,对形参的修改并不会修改实参的值函数的传址调用传址调用指的是将函数外部创建的内存地址传给函数形参的一种调用方式这种传参方式可以在函数内部操作函数外部的变量练习二分查找#include<stdio.h>int binary_2(int arr[] , int k,int len);int main() { int arr[ ] = { 1,2,3,4,5,6,7,8,9,10 }; int len = sizeof(ar

2021-07-22 20:46:05 177 2

空空如也

空空如也

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

TA关注的人

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