自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GO 语言基础语法一 (快速入门 Go 语言)

Go语言基础语法

2023-03-04 15:49:23 761 2

原创 网络基础2

文章目录将数据多变一的过程,称为序列化,将数据一变多的过程,称为反序列化,如何序列化和反序列化是由协议规定的,而协议是根据应用场景所决定的

2022-10-09 16:54:48 889

原创 网络基础和套接字编程

文章目录在体系结构中,网络在什么位置?用户使用电脑/手机上的app时,app会将用户的操作发送给操作系统,操作系统内有一个协议栈,协议栈将用户的数据进行封包,再通过网卡传递到网络中,网络内部经过各种路由转发,将数据传送到了目标服务器,服务器的协议栈将数据进行解包传递给服务器的应用层,服务器的应用层解析后再传递回用户(将上述过程逆过来)协议栈是网络标准化组织定义的,所有的操作系统必须支持(TCP/IP协议)..................

2022-10-03 14:29:19 768

原创 Linux多线程

文章目录以往创建进程会创建 task_struct,mm_struct,页表等,但如果创建 “进程” 只能创建 task_struct,不能创建 mm_struct,页表等,且创建出来的 task_struct 和父进程共享进程地址空间,这些"进程"被称作线程在Linux中,站在CPU的角度,能否识别 task_struct 是进程还是线程 ?......

2022-09-17 12:35:27 922

原创 C++多态

文章目录

2022-01-17 20:04:26 504

原创 C++哈希

文章目录一.unordered系列关联式容器一.unordered系列关联式容器unordered_map 使用和介绍(1). unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。(2). 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。(3). 在内部,unordered_map没有对<kye, value>按照任何特定的

2022-01-16 20:22:29 1011 2

原创 map和set的介绍和使用

文章目录一.关联式容器二. setset 构造set 修改set 容量和迭代器三.multiset四.mapmap构造map修改一.关联式容器在之前,我们已经接触过STL中的部分容器,比如:vector,list,deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比

2021-11-23 15:28:02 1162

原创 AVL树/红黑树介绍及插入操作实现

文章目录一.AVL树概念二.AVL树模拟实现三.红黑树概念四.红黑树模拟实现五. map/set模拟实现一.AVL树概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质

2021-11-23 14:24:11 791 2

原创 Linux进程信号

文章目录一.信号入门产生信号一.信号入门(1). 信号还没有产生的时候,对于我们来讲,我们是知道信号产生以后,应该怎么做的。例如 : 我们晚上定了一个闹钟,虽然闹钟并没有响,但我们知道闹钟响了以后,我们要起床虽然我们没有看到红绿灯,但我们知道红灯停,绿灯行(2). 我们能够识别这些信号,是因为有人曾经给过我们这样的"教育"过程,让我们将信号特征,如何识别,及其处理过程记住了例如 : 小时候,老师和父母教育我们红绿灯的特征,如何识别,以及遇到红绿灯该怎么做(红灯停,绿灯行)(3). 信号产生的时

2021-11-20 16:58:01 2484 10

原创 二叉搜索树介绍和模拟实现

文章目录一.二叉搜索树概念一.二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:(1). 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值(2). 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值(3). 它的左右子树也分别为二叉搜索树二叉搜索树之所以被称作搜索树是因为该结构适合用来查找,如在上图中我们想要查找10,根节点为11,所以我们直接去11的左半部分找,7 < 10,所以我们去7的右半部分找,9 < 10,所以我们去9

2021-11-07 21:54:50 358 2

原创 进程间通信

文章目录一.进程间通信介绍进程间通信目的进程间通信发展进程间通信分类二.管道什么是管道一.进程间通信介绍进程间通信目的(1). 前面的文章说过进程之间是具有独立性的,那就说明两个进程要想完成数据共享成本是比较高的,因为进程的独立性就体现在数据各自私有,所以进程间通信,一般一定要借助第三方(OS)资源为什么进程间通信 ?进程与进程有时候也需要数据互相传输,A进程要把数据传输给B进程,让B进程进行一些业务处理(2). 通信的本质就是"数据的拷贝"进程A->数据拷贝给OS->OS把数据拷贝

2021-11-01 18:13:23 944 9

原创 Linux 基础IO

文章目录一.C文件IO相关操作二.系统文件IO一.C文件IO相关操作只有文件名但不带路径的话,默认在当前路径下打开文件(以写的方式打开文件若文件不存在会自动创建文件),那到底什么是当前路径呢?// test目录下 myproc.内容#include<stdio.h>int main(){ FILE* fp = fopen("test.txt","w"); if(fp == NULL) { perror("

2021-10-31 20:19:02 982 9

原创 C++继承详解

文章目录一.继承的概念和定义二.基类和派生类对象赋值转换三.继承中的作用域四.派生类的默认成员函数五.继承和友元六.继承与静态成员七.菱形继承及菱形虚拟继承八.C++编译器如何通过虚继承解决数据冗余和二义性一.继承的概念和定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的

2021-10-14 11:53:53 2460 14

原创 C++模板(函数模板/类模板)

文章目录一.泛型编程二.函数模板一.泛型编程在引入泛型编程之前,我们先来看这样一个问题,怎么做到实现一个通用的交换函数呢?在C语言阶段我们可能会像下面这样写,需要分别实现不同类型的交换函数,又由于C语言不允许出现同名函数,所以函数名也需要不一样,写起来很繁琐void Swapi(int* e1, int* e2){ int tmp = *e1; *e1 = *e2; *e2 = tmp;}void Swapd(double* e1, double* e2){ double tmp =

2021-10-05 22:00:31 5083 23

原创 Linux进程控制

文章目录一.进程创建写时拷贝fork常规用法fork调用失败的原因二.进程终止进程退出场景进程常见退出方法一.进程创建在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程,fork函数初步使用在Linux进程概念中已经给出,现在我们再来深入认识一下#include <unistd.h>pid_t fork(void);// 返回值:自进程中返回0,父进程返回子进程id,出错返回-1(1). 为何要给子进程返回0,给父进程返回子

2021-10-01 18:11:48 874 11

原创 Linux进度条小程序(结合缓冲区相关知识)

文章目录

2021-09-28 16:38:04 364

原创 C++IO流详解

文章目录一.C++输入输出二.C++文件流一.C++输入输出C++标准库提供了一组丰富的输入/输出功能,本文重点讲解C++编程中最常见的 I/O 操作C++的 I/O 发生在流中,流是字节序列,如果字节流是从设备(如键盘,磁盘驱动器,网络连接等)流向内存,这叫做输入操作,如果字节流是从内存流向设备,这叫做输出操作。标准输出流 :预定义的对象 cout 是 ostream 类的一个实例,cout 对象"连接"到标准输出设备,通常是显示屏。标准输入流 :预定义的对象 cin 是 istream 类

2021-09-25 15:34:05 4774 20

原创 Linux进程概念

文章目录一.冯若依曼体系结构二.一.冯若依曼体系结构输入设备 : 计算机最终的目的是为了解决人的问题,而想解决人的问题的前提是人要将相应的数据输入到计算机当中,所以需要有输入设备输出设备 : 计算机需要将计算后的结果提供给人,所以需要有输出设备运算器 : 对输入的数据进行运算(算数运算/逻辑运算)控制器 : CPU的指挥控制中心存储器(内存) : 由于输入输出设备相比于CPU的计算速度较慢,根据木桶原理,整体计算机的速度偏慢, 因此引入了存储器(内存),内存的特点是比输入输出设备快,但比CPU

2021-09-22 08:49:51 1586 23

原创 stack和queue使用及模拟实现

文章目录一.stack介绍二.stack使用三.stack模拟实现四.queue介绍五.queue使用六.queue模拟实现七. priority_queue的介绍仿函数八.priority_queue的使用九.priority_queue模拟实现(1).仿函数(2).push()(3).pop()(4). top()(5).empty()(6).size()(7). 完整模拟实现(8). priority_queue具体应用一.stack介绍template <class T, class Co

2021-09-15 12:36:54 358 9

原创 list模拟实现

文章目录一. list接口函数总览二.结点类的模拟实现三. 迭代器类模拟实现构造函数前置++和后置++前置- -和后置- -==/!=运算符重载* 运算符重载-> 运算符重载list模拟实现构造函数拷贝构造函数赋值运算符重载析构函数begin和endfront/backinserterasepush_back/pop_back/push_front/pop_frontsizeclearemptyswapresize一. list接口函数总览namespace lyp{ //模拟实现list当中

2021-08-16 22:50:43 925 11

原创 list介绍和基本使用

文章目录一. list介绍二. list使用constructoriteratorcapacityemptysizeElement accessfront/backModifiersassignpush_front/pop_frontpush_back/pop_backinserteraseswapresizeclearoperationsspliceremoveremove_ifuniquesortreverse一. list介绍list文档介绍1). list是可以在常数范围内在任意位置进行插入和

2021-08-13 20:07:53 1482 8

原创 vector模拟实现

文章目录一.vector接口总览二.vector模拟实现默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数iteratorbegin/endcapacitysizecapacityreserveresizeemptymodifierspush_backpop_backinserteraseaccessoperator[]一.vector接口总览namespace lyp{ //模拟实现vector template<class T> class vector { public

2021-08-13 10:12:35 695 7

原创 vector介绍和基本使用

文章目录一.vector介绍二.vector使用(1).constructor一.vector介绍vector文档vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后

2021-08-11 14:15:04 11854 10

原创 Linux基础开发工具使用(yum,vim,gcc/g++,gdb,make,git)

文章目录一.Linux 软件包管理器 yum(1).软件包和软件包管理器(2).ping指令(3).查看软件包(4).安装软件(5).卸载软件二.Linux编辑器-vim使用(1).vim基本概念(2).vim模式切换(3).vim命令模式命令集(1).移动光标(2).复制(3).撤销上一次操作(4).删除文字(5).替换(6).更改(7).跳至指定的行(4).vim底行模式命令集(1).列出行号(2).跳到文件中的某一行(3). 不退出vim执行命令行命令(4).分屏(5).光标在多屏幕下进行切换(6).

2021-08-05 18:44:07 2583 4

原创 Shell运行原理及Linux权限

文章目录Shell的运行原理Linux权限的概念(1).实现用户账号的切换(2).仅提升当前指令的权限(3).如何将普通用户添加到信任列表Linux权限管理(1).文件访问者的分类(人)Shell的运行原理我们都知道,Window操作系统是通过图形化界面和用户进行交互的,Linux操作系统是通过命令行操作和用户进行交互的,Windows和Linux和用户的交互方式虽然不同,但在操作系统看来本质上是一样的,我们把图形化界面和命令行操作称作操作系统的 “外壳程序”从技术角度, Shell的最简单定义:命令

2021-07-31 16:56:51 2433 21

原创 云服务器搭建和Linux基本指令

文章目录一.使用云服务器二.Linux基本指令(1).ls指令(2).pwd指令(3).cd指令(4).touch指令(5). mkdir指令一.使用云服务器(1). 登录腾讯云或阿里云官网购买云服务器阿里云(2).购买之后可以重置自己的实例密码,查询到自己的公网IP(3). 下载XShellXShell免费下载(4).使用XShell登录云服务器二.Linux基本指令(1).ls指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件

2021-07-28 22:12:21 1855 8

原创 编译器对连续的构造函数和拷贝构造函数的优化

一.传值和传引用传值 : 在调用f1(a1)函数时,会首先进行压参数,即用 a1 拷贝构造 aa,会调用拷贝构造函数,f1函数调用结束后,aa对象销毁,执行析构函数,接着main函数调用结束,a1对象销毁,执行析构函数传引用 : 在调用f1(a1)函数时,aa 是 a1 的引用,不会调用拷贝构造函数,main函数调用结束,a1对象销毁,执行析构函数可以看到传引用比起传值少调用了一次拷贝构造和一次析构函数,提高了效率#include<iostream>using namespace s

2021-07-26 15:41:51 359 11

原创 C++ STL string 详解

文章目录一.string类的常用接口声明(1).string类对象的常见构造(2).string类对象的容量操作一.string类的常用接口声明(1).string类对象的常见构造(1). string();功能 : 构造空的string类对象,即空字符串(2).string (const string& str);功能 : 拷贝构造函数(3).string (const string& str, size_t pos, size_t len = npos);功能 : 拷贝s

2021-07-26 15:41:01 487 1

原创 C++内存管理

文章目录一.C/C++内存分布二.C++动态内存管理三.operator new 与 operator delete 函数四.定位new表达式五.malloc/free和new/delete的区别六.内存泄露一.C/C++内存分布(1). 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。(2). 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信(3). 堆用于程序运行时动态内存分配,堆是可以向上增长的。(4). 数据

2021-06-05 11:01:04 363 19

原创 类和对象(二)

文章目录一.初始化列表二.explicit关键字三.友元函数和友元类四.static成员五.内部类六.C++11的成员初始化一.初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。初始化列表是成员列表定义初始化的阶段,而在构造函数体内赋值不能叫初始化,因为初始化只能初始化一次,构造函数体内可以进行多次赋值class Date{public: Date(int year, int month, int day) :

2021-06-03 08:18:24 291 15

原创 C++类和对象(一)

文章目录一.类的引入一.类的引入在C语言阶段,struct关键字用来构造用户自定义数据类型,C++中的struct兼容C的所有用法,同时C++把struct升级成了类,类由两部分组成,一部分是成员变量(属性),另一部分是成员函数(用来对成员变量进行操作),在c语言struct里不能定义函数,C++将struct升级成了类以后,struct里就可以定义函数了typedef int STDataType;struct Stack{ // 定义函数 void StackInit(int initca

2021-05-30 13:17:15 3006 16

原创 C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)

文章目录一.C++关键字二.命名空间一.C++关键字C++总共有63个关键字,在入门阶段我们只是大致了解一下就可,在后续博客中会逐渐讲解二.命名空间相信学过C++的同学,一定都写过下面这个简单的程序#include<iostream>using namespace std;int main(){ cout<<"hello world"<<endl; return 0;}我们先来看第二行代码,using namespace std , 这行代码是

2021-05-23 15:41:01 638 27

原创 常考排序算法总结(插入排序,希尔排序,快速排序,归并排序,计数排序)

文章目录一.插入排序二.希尔排序三.快速排序四.归并排序五.计数排序一.插入排序当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移具体流程在图中已经画出插入排序在最坏的情况的时间复杂度是多少呢?最坏的情况很显然是逆序的情况,要想有序,第二个数需要移动1次,第三个数需要移动

2021-05-16 18:59:17 1225 20

原创 二叉树,堆详解

文章目录一.树及其相关概念(1).树的介绍(2).树的表示二.二叉树概念及结构(1).二叉树概念及特点(2).特殊的二叉树(3).二叉树的性质(4).二叉树相关练习三.二叉树的顺序结构及实现四.二叉树的链式结构及实现一.树及其相关概念(1).树的介绍树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。树的特点 :(1).有一个特殊的结点,称为根结点,根节点没有前驱结点(2).除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,

2021-05-03 18:33:40 2002 8

原创 栈和队列讲解和实现

文章目录一.栈(1).初始化栈(2).入栈(3).出栈(4).获取栈顶元素(5).获取栈中有效元素个数(6). 检测栈是否为空,如果为空返回true,非空返回false(7).销毁栈(8).完整代码实现二.队列(1).初始化队列(2).入队列(3).出队列(4).获取队列头部元素(5).获取队列队尾元素(6).获取队列中有效元素个数(7).检测队列是否为空,如果为空返回true,非空为false(8). 销毁队列(9).完整代码实现一.栈栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作

2021-04-18 16:53:25 349 5

原创 双向循环链表讲解及实现

文章目录一.带头双向循环链表二.实现(1).动态申请一个结点一.带头双向循环链表带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个链表虽然结构复杂,但是使用代码实现以后会发现能带来很多优势.二.实现Lish.h中部分声明(1).动态申请一个结点...

2021-04-10 18:04:55 12140 7

原创 c语言思维导图总结

其中一些知识点放置了博客链接

2021-04-04 17:40:53 581 5

原创 程序的编译 + 链接 + 预处理指令

文章目录一.程序的翻译和执行环境二.c语言程序的编译和链接三.预定义符号介绍四.预处理指令 #define五. # 和 ## 的作用六.宏和函数的对比一.程序的翻译和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。二.c语言程序的编译和链接从总体结构上来讲,编译器会将每一个源文件进行单独编译,最终形成一个目标文件(后缀为.obj)然后,链接器将多个目标文件和所需要的链接库进行链接形成

2021-03-22 10:39:03 1925 6

原创 文件操作及常见文件操作函数使用

文章目录一.什么是文件二.文件的打开和关闭(1).文件指针(2).文件的打开和关闭三.文件的顺序读写四.文件的随机读写五.文件读取结束的判定一.什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件 :包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe).数据文件 :文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件.文件名

2021-03-15 21:16:54 2512 10

原创 动态内存分配(malloc,calloc,realloc)和柔性数组

文章目录1.为什么使用动态内存分配2.malloc和free3.calloc和realloc1.为什么使用动态内存分配在声明数组时,必须用一个编译时常量指定数组的长度,但是,数组的长度常常在运行时才知道,这是因为它所需要的内存空间取决于输入数据。例如,一个用于计算学生等级和平均分的程序可能需要存储一个班级所有学生的数据,但不同班级的学生数量可能不同。在这种情况下,我们就可以尝试一下动态内存开辟了。2.malloc和freemalloc 函数原型 :void* malloc (size_t size

2021-03-11 12:33:04 3046 16

空空如也

空空如也

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

TA关注的人

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