自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程的概念

文章目录1. 进程的基本概念1.1 基本概念1.2 描述进程—–PCB1.3 task_ struct内容分类进程的其他概念2. 进程的特征3. 进程的状态和转换3.1 五种状态3.2 状态转换4. 进程和线程说明1. 进程的基本概念1.1 基本概念进程(Process)是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。进程是程序真正运行的实例,若干进程可能

2021-05-06 21:43:38 5514

原创 进程的概念

文章目录1. 进程的基本概念1.1 基本概念1.2 描述进程—–PCB1.3 task_ struct内容分类2. 进程的特征3. 进程的状态和转换3.1 五种状态3.2 状态转换4. 进程和线程说明1. 进程的基本概念1.1 基本概念进程(Process)是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。进程是程序真正运行的实例,若干进程可能与同一个程序相

2021-05-06 21:37:52 189

原创 智能指针——weak_ptr

1. 开篇正式介绍weak_ptr之前,先来复习一下shared_ptr 的一些知识。我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的引用计数器。对于引用计数法实现的计数,总是避免不了循环引用(或环形引用)的问题,shared_ptr也不例外。2. weak_ptr的概念weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由 shared_ptr管理的对象而不影响所指对象的生命周期,也就是将一个w

2021-04-18 10:09:25 207

原创 智能指针——shared_ptr

1. shared_ptr的定义shared_ptr是一种 智能指针( smart pointer)。shared_ptr的作用有如内 指针,但会记录有多少个tr1::shared_ptrs共同指向一个对象。这便是所谓的 引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助。2. shared_ptr的数据结构及示例shared_ptr是引用计数型智能指针,几乎所有的实现都采用

2021-04-17 17:27:17 13630 2

原创 智能指针——unique_ptr

1. 开篇unique_ptr(唯一)是一种定义在中的智能指针(smart pointer)。不能进行复制操作只能进行移动操作。unique是独特的、唯一的意思,故名思议,unique_ptr可以"独占"地拥有它所指向的对象,它提供一种严格意义上的所有权。unique_ptr和shared_ptr类型指针有很大的不同: shared_ptr 允许多个指针指向同一对象,而unique_ptr在某一时刻只能有一个指针指向该对象(两个unique_ptr不能指向同一个对象)。unique_ptr保存指向某

2021-04-15 12:43:25 459

原创 【Linux】库文件

文章目录1. 库文件定义2. 库文件查找命令3. 动态库3.1 动态库定义3.2 动态库生成4. 静态库4.1 静态库定义4.2 静态库生成5. 动态库和静态库区别1. 库文件定义在我们写代码的的时候经常会用到很多头文件,其实并不是用那些头文件,而是告诉系统,我写的写个代码需要几个函数,而这几个函数存在一个文件里,我已经把文件名也就是头文件告诉系统了,系统会自动的去一个目录下寻找有没有这个文件。而这个目录就是我们说的库。你可以简单的把它看成一个仓库,因为它会提供给你一些可以直接拿来用的变量、函数或类。

2021-04-15 12:43:03 226

原创 智能指针——auto_ptr

1. 开篇C++里面的四个智能指针:auto_ptr、unique_ptr、shared_ptr、weak_ptr,其中后三个是C++11支持,而这个auto_ptr已经被C++11弃用。但auto_ptr还是有必要学习的。C++的auto_ptr所做的事情,就是动态分配对象以及当对象不在需要时自动执行清理。2. 构造函数与析构函数auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int*p = new int

2021-04-13 14:54:16 603

原创 【Linux】虚拟地址空间

这里写目录标题1. 物理地址和虚拟地址定义2. 虚拟地址空间分布2.1 内核空间2.2 栈(stack)2.3 堆(heap)2.4 BSS段2.5 数据段(Data)2.6 代码段(text)2.7 保留区3. 分段式存储3.1 分段式存储定义3.2 分段式存储示例3.3 分段式存储优缺点4. 分页式存储4.1 分页式存储定义4.2 分页式存储示例4.3 分页式存储优缺点1. 物理地址和虚拟地址定义物理地址 (physical address): 放在寻址总线上的地址。放在寻址总线上,如果是读,电路根

2021-04-13 13:27:58 309

原创 【Linux】Makefile文件

Makefile文件1. Makefile定义一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。2. Makefile 介绍make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。首先,我们用一个示例来说明Makefile的

2021-04-12 20:53:32 423 3

原创 【Linux】gdb常用的调试命令

gdb 常用的调试命令l 显示代码b +行号 加断点info break 显示断点信息delete 删除断点r 启动程序n 单步执行,下一步c 继续执行s 进入函数finish 跳出函数p 打印q 退出调试bt 显示函数调用栈多进程中,跟踪子进程:set follow-fork-mode child多线程中,A 查看线程信息 info threads B 切换到指定线程 thread id...

2021-04-09 12:43:58 121

原创 程序编译连接原理

main.c–>main需要四步:预处理,编译,汇编,连接1.预编译阶段:gcc -E main.c -o main.i预编译阶段主要做六件事:(1) 删除所有的“#define”,并且展开所有的宏定义;(2) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;(3) 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;(4) 删除所有的注释;(5) 添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行

2021-04-08 20:20:53 138 3

原创 设计模式——观察者模式

这里写目录标题观察者模式1.1 观察者模式1.2 观察者模式概述1.3 观察者模式定义1.4 观察者模式结构图中包含角色1.5 观察者模式的主要优点和缺点1.6 拓展补充观察者模式1.1 观察者模式 模式动机: 建立一套低耦合的消息触发机制。观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他

2021-04-08 20:07:18 259

原创 快速排序的三种实现方法

文章目录1.快速排序的思想2.基本实现2.1第一种排序2.2第二种排序2.3第三种排序(挖坑法)2.4代码测试3.代码优化4.快速排序小结1.快速排序的思想快速排序的过程可以分为以下几步:先找一个基准,将这个基准赋值给临时变量tmp中从后往前找第一个比基准小的数据赋值到i位置从前往后找第一个比基准大的数据赋值到j位置重复步骤1和步骤2直到i和j相遇,然后将tmp的值赋给i和j相遇的位置将基准左边和基准右边的数据继续按照步骤1,2,3,4进行,直到数据全部排完。2.基本实现2.1第一种排

2021-04-07 15:07:09 2698

转载 【Linux】Linux中vim的使用

https://blog.csdn.net/weixin_43967449/article/details/109818754?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161768143016780269851396%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=1617681430167802698513

2021-04-06 12:05:23 110

原创 设计模式——工厂模式(二)

文章目录工厂方法模式1.1工厂方法模式概述1.2工厂方法模式定义如下1.3工厂方法模式要点1.4设计步骤及代码示例1.5工厂方法模式结构图中包含角色1.6工厂方法模式的主要优点和缺点1.7工厂方法模式总结工厂方法模式1.1工厂方法模式概述在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此外

2021-04-05 22:07:06 149

原创 【Linux】vim简单配置

vim的简单配置我们一般自己去配置的时候,不去改动这个文件,而是选择在自己当前用户的主目录下新建一个 .vimrc 文件,存放我们的配置。1.1进入当前主目录cd ~/1.2创建一个.vimrc文件vim .vimrc1.3将下面的内容复制进去,保存 set nocompatible set number filetype on set history=1000 color evening syntax on set autoindent set smarti

2021-04-05 19:51:14 155

原创 设计模式——工厂模式(一)

文章目录简单工厂模式1.1模式动机1.2简单工厂模式定义1.3简单工厂模式要点及代码示例1.4简单工厂模式结构图中包含角色1.5简单工厂模式总结简单工厂模式1.1模式动机首先将需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需调用工厂类的工厂方法并

2021-04-04 21:51:57 154

原创 【Linux】 Linux 系统文件相关的操作命令

文章目录一、对于目录的命令二、文件操作一、对于目录的命令ls 默认浏览当前所在目录下的文件信息目录:再看Windows下常叫文件夹家目录:多用户操作系统—同时可以多个用户登录linux进行操作–操作系统为每一个创建的受保护目录-a 选项:浏览目录下的所有文件,包括隐藏文件-l 选项:查看目录下的文件详细信息pwd :查看当前的所在路径绝对路径:唯一路径–指的是以根目录作为起始表达的路径 /home/san相对路径:多种多样–指的是以某个路径作为参照路径–通常以当前目录为起始路径.

2021-04-04 20:09:16 104

原创 【Linux】目录组织结构、文件类型和文件权限

文章目录1.目录组织结构1.1目录特点1.2目录结构1.3目录说明2.文件类型2.1普通文件类型2.2目录文件类型2.3字符设备文件2.4块设备文件2.5套接字文件2.6管道文件2.7链接文件3.文件权限1.目录组织结构当您使用Linux的时候,如果您通过ls-la/就会发现,在/下包涵很多的目录,比如etc、usr、var、 bin … …等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为树形结构。lin

2021-04-02 21:53:19 1532 4

原创 设计模式——单例模式

文章目录单例模式1.单例模式是什么2.单例模式的特点3.饿汉单例模式实现4.懒汉单例模式实现5.饿汉式单例类与懒汉式单例类比较6.单例模式总结单例模式1.单例模式是什么对于一个软件系统的某些类而言,我们无须创建多个实例。如Windows系统中的任务管理器,垃圾回收器。在实际开发中,我们也经常遇到类似的情况,为了节约系统资源,有时需要确保系统中某个类只有唯一-个实例,当这个唯一实例创建成功之后, 我们无法再创建一个同类型的其他对象, 所有的操作都只能基于这个唯一实例。为了确保对象的唯一性,我们可以通过单

2021-04-02 14:26:14 112

原创 【Linux】gcc和g++的区别

gcc和g++编译器的区别gcc 现在是 gnu 提供的一些编译器工具的集合(Gnu Compiler Collection),以前是gnu 组织提供的 c 编译器(Gnu C Compiler)。g++是 c++编译器编译器。gcc 可以编译.c 和.cpp 的源文件对*.c 按 c 语言语法规则处理,*.cpp 自动按 c++语法规则处理,但默认不链接相应的 c++库,需要手动指定链接的库名"-lstdc++"。g++可以编译.c 和.cpp 的源文件,但是都按 c++的语法规则来处理。.

2021-04-01 20:25:15 166

原创 排序算法——各算法性能

各排序算法的性能总结最后,在这里对前面所写的八众排序进行一个算法性能总结。到这里,八种排序算是全部写完了。

2021-04-01 20:10:20 138

原创 排序算法——基数排序

基数排序1.基数排序的思想针对于有多个关键字的排序算法。先按照一个关键字进行排序,完成后在按另一个关键字排序。先按照权重小关键字排序,在按照权重大的关键字排序。按照每个关键字的值的范围,定义上相同数量的队列。对于数字我们先按照个位进行排序,然后在按照十位排。2.基数排序的实现// 获取最大数据的位数int GetDigit(int *arr, int len){ int max = arr[0]; for (int i = 0; i < len; ++i) { if (ma

2021-04-01 20:07:12 180

原创 排序算法——归并排序

二路归并排序7.1 二路归并排序的思想一次排序过程,将已经各自有序的两个段的数据合并一个段,并且合并后依旧有序。第一次我们认为单个数据是有序的,一个数据就是一个段,一次排序后,两个数据就是一个有序数据段,这样下一次每个有序数据段就是两个数据。最后将其合并成一个完成有序段,则整个数据就已经排序好了。7.1二路归并排序的实现void Meger(int *arr, int len, int width, int *brr){ int low1 = 0; int high1 = low1 +

2021-04-01 19:57:24 112

原创 排序算法——堆排序

堆排序1.基础概念二叉树的概念:二叉树(binary tree)是指树中节点的 度 不大于2的有序树. 在二叉树中除了根节点的每一个节点都仅有一个父节点,所有的节点最多只能有两个孩子节点。满二叉树的概念:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。国内教材定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。国外(国际)定义:a binary tr

2021-04-01 17:37:33 214

原创 排序算法——选择排序

选择排序2.1选择排序的思想先遍历一遍整个待排序数据,找到当前最大的值的 位置 。将标记的最大值与当前最后一个元素交换。重复上述过程,直到只剩下一个数据。上面的步骤每做一次,下一次就少遍历一个数据(本次找到的最大值)选择排序执行的趟数:数据元素的个数 len - 12.2选择排序的实现/*时间复杂度: O(n^2)空间复杂度: O(1)稳定性: 不稳定*/void SelectSort(int *arr, int len){ for (int j = 0; j < l

2021-04-01 17:11:46 79

原创 排序算法——希尔排序

希尔排序 – 增量排序1.希尔排序的思想现将数据分成d个组, 在每个分组内使用直接插入排序算法排序 – 目的就是使得整个数据序列越来越有序。接着将数据继续分组(分组数会越来越小),然后排序, 最后一次分组肯定为1。每个分组数一般是互质的。2.希尔排序的实现void Shell(int *arr, int len, int group){ for (int i = group; i < len; ++i) // i负责遍历整个数据段, 控制本次直接插入排序处理那一组的数据 { in

2021-04-01 13:48:25 124

原创 排序算法——直接插入排序

直接插入排序1.直接插入排序的思想将数据分成两部分,前一段是已经有序的数据(初始时,前一段数据只有一个),后一段都是无序数据。从无序数据中拿一个数据(左边的第一个数据),插入到前一段的有序数据中,并且使得有序数据段依旧有序。重复上述过程,直到无序数据没有数据。做一次插入排序后:2.直接插入排序的实现/*时间复杂度:O(n^2)空间复杂度:O(1)稳定性: 稳定*/void InsertSort(int *arr, int len){ for (int i = 1.

2021-04-01 13:29:21 207 2

原创 排序算法——冒泡排序

冒泡排序1.冒泡排序的思想一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换 – 将最大的元素交换到整个数据的最后。排序的趟数: 数据元素的个数: len - 12.冒泡排序的实现/*时间复杂度:O(n^2)空间复杂度:O(1)稳定性: 稳定的*/void BubbleSort(int *arr, int len){ for (int j = 0; j < len - 1; ++j) { bool flag = true; // fla.

2021-04-01 13:16:43 92

原创 排序算法——快速排序

快速排序1. 快排的思想先在数据中找一个基准数据 : 找待排序数据序列的第一个, 随机数, 三位数取中将数据按照基准数据分成两部分,前一段都比基准小,后一段都比基准大。按照同样的思想分别处理前一段和后一段数据。2.代码的实现(递归版)数据段为start到end之间的数据。先将基准数据(start位置)保存到tmp中,i=start,j = end。 在i<j的时候,重复执行以下两个过程。通过j从后往前找第一个比基准数据小的数据,找到后就将j位置的值赋值到i位置通过i从前向后.

2021-04-01 13:06:01 278

原创 【C++】字符串中运算符的重载问题

字符串中运算符的重载问题运算符的重载:运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。定义运算符重载函数的一般格式:返回值类型 类名::operator重载的运算符(参数表){……}在字符串中,运算符的重载问题在于字符串和字符串之间进行计算。首先我们定义一个字符串的类,并为其写出构造函数、拷贝构造函数,析构函数、打印字符串函数。class String{private: char

2020-11-01 17:57:07 2113

空空如也

空空如也

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

TA关注的人

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