自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 八大排序:源代码

#pragma once#include<iostream>#include<algorithm>#include<stack>using namespace std;//void swap(int* a, int* b)//{// int temp = *a;// *a = *b;// *b = temp;////}void Bubble_Sort(int *a, int size){ for (int i = 0; i < si.

2022-04-19 23:37:40 304 1

原创 linux 线程和进程的区别与联系::

进程::承担分配系统资源的基本实体线程::调度的基本单位,线程是进程里面的执行流(线程在进程的地址空间内运行)linux中没有真正意义上的线程!!!! 线程是用进程模拟的。。地址空间上: 线程没有自己独立的地址空间,共享进程的空间 但是进程包含独立的地址空间开销:进程之间的切换会有较大的开销,而线程比进程小线程是一个轻量级的进程,线程的通信比进程更加的方便,系统在运行的时候会给每个进程分配资源,而不会为线程分配资源,线程所使用的资源来自其所属的进程的资源还有一个问题::: 线程共享进

2022-04-15 19:53:30 278

原创 linux 信号产生 信号保存 信号处理

信号的产生方式四种:;1,通过终端摁键产生的信号2,调用系统函数产生的信号 ;例如signal() abort() kill()3,由软件链接产生的信号 alarm4 硬件异常产生的信号 CPU信号的保存通过位图的方式信号的处理:::实际执行信号的处理的动作称为信号递达信号从产生到递达之间的状态成为信号未决进程可以选择阻塞某个信号被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作注意 递达和忽略是不同的 只要信号被阻塞就不会递达,

2022-04-14 19:42:08 499

原创 linux 只共享内存

共享内存分为四部分shmget shmat shmde shmctl共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据1 shmget()函数int shmget(key_t key,size_t sizie,int shmflg);key :这个共享内存段的名字 size_t size 共享内存的带下shmflg 一般是 IPC_CREATE|IPC_EXCL|06.

2022-04-13 22:52:43 113

原创 虚基表,虚函数表,打印虚函数表

虚基表是在继承里面提到的概念 它存在的意义或者是目的是用来解决数据冗余和数据二义性的价值,在继承里面 尤其是菱形继承里面 从不同路径下继承而来的同一基类,会在子类里面有多份拷贝,将会存在两个问题 数据冗余和二义性的问题 当然如果是非要修改继承而来的值加上作用域也是可以实现的,在虚基表中存放的到虚基类的偏移量,虚基表也是以NULL结尾。虚函数表有时候也称之为虚表 首先这个虚函数表他是存在哪里的呢 存在常量区的C++中的虚函数的实现一般是通过虚函数表(Virtual Table)来实现的。简称为V-Tabl

2022-04-12 10:03:19 717 2

原创 动态库 静态库 解析以及分别实现

静态库静态库 .a 程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 生成的可执行程序是比较大的动态库.so 程序在运行的时候才去链接动态库的代码 多个程序共享使用库的代码生成一个静态库的步骤是 先写.h .c 文件 然后用.c文件生成.o 文件 gcc -c 就可以实现,如果.o文件过大,则可以使用一个归档工具ar -rc libmy.a .o .o .o rc 表示 replace and creat这里写了一个加法一个减法来模拟实现生成一个动态

2022-04-11 09:39:01 637

原创 cannot find -lc 出现这个问题怎么解决呢

如果是在自己写完静态库后 你发现在编译文件后报出cannot find -lc 的错误 你就安装一下这个就可以百分百解决啦sudo yum install glibc-static

2022-04-11 09:28:12 1673 2

原创 实现一个简易的xshell 能够完成输出重定向 追加重定向等

为了回顾fork waitpid open 和重定向 追加重定向等知识 实现一个简易版本的xshell 后续不断完善

2022-04-10 23:23:04 138

原创 Xshell 常用命令大全 自用

(1)命令ls——列出文件ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件ls a* 列出当前目录下以字母a开头的所有文件ls -l *.doc 给出当前目录下以.doc结尾的所有文件(2)命令cp——复制文件cp afile afile.bak 把文件复制为新文件afile.bakcp afile /home/bible/ 把文件afile从当前目录复制到/home/bible/目录下cp * /tmp 把当前目录下的所有未隐藏文件复制到/tmp/

2022-04-10 16:16:06 2123

原创 linux 文件描述 等。

系统调用接口:open("./mytest.tst", O_WRONLY|O_CREAT,0644)open函数的返回值 返回的是fd 文件描述符号 , linux 默认打开的文件描述符号是 0 1 2 他们分别是 stdin stdout stderr 他们对应的物理设备是键盘 显示器 显示器文件描述符的分配的规则是 找到当前没有被使用的最小的数组的一个下标;如果一个文件没有被打开 那么这个文件在哪里呢 在磁盘上 那么该文件要不要占用磁盘空间呢 必须占用,文件有属性 属性也是数据 磁盘文件

2022-04-09 23:07:00 328

原创 一 程序地址空间,二 进程等待 三 程序替换

一 进程地址空间:::就三个概念 一个是 页表 一个是 地址空间 一个是 物理内存我们在c 和c++ 里面打印出来的地址 就是虚拟地址在这里我们创建一个全局变量 global_val; 的值我们通过父子进程操作 改变 global_val 的值 我们发现 地址都是一样的 但是值是不一样的 ,那么这个地址是实际的物理内存吗? 答案是肯定不是的, 这个是进程地址空间 他们对应一个页表,然后再对应物理内存 我们再实际操作中 能直接访问物理内存吗 答案也是不可以的 我们是通过进程地址空间和.

2022-04-08 23:00:46 305

原创 linux 进程(二) 孤儿进程 优先级 环境变量

孤儿进程:: 父进程 退出 而子进程未退出 这时会造成孤儿进程优先级 PRI NI 优先级数PRI 是进程的优先级 通俗点说就是程序被CPU执行的先后顺序NI nice 的取值范围是 -19 ~20新的优先级数= old+Ni 但是主要每一次的OLD 都是80ps -ls 里面的uid 就是woami 代表执行者的身份怎么修改NI的值呢 top 然后 r 然后输入 pid 然后 输入NI的值 如果不要改 加sudo环境变量环境变量一般是指在操作系统中 用来指定操作系统运行

2022-04-08 12:52:36 119

原创 linux 进程(一)

Linux 进程的概念::课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体进程的描述 我们用pcb 进程控制模块来描述task struct 内容分类标识符:: 描述本进程的唯一标示符,用来区别其他进程状态: 任务状态 推出代码 退出符号优先级 相对于其他进程的优先级程序计数器 程序中即将被执行的下一条指令的地址内存指针:: 包括程序代码和进程相关的数据的指针 还有和其他进程共享的内存块的指针查看进程 ls/proc/

2022-04-07 21:43:54 438

原创 linux 基础:::::

一、、常见指令和权限理解1 xshell 下的复制跟粘贴 ctrl+insert shift+insert1 mkdir 创建一个目录2 rmdir rm 如果是空目录可以用rmdir 来删除 如果不是空目录 用 rm-rf 来删除3 man man1 普通调用 man 2 系统调用如 open write man 3 库函数Linux 权限的概念文件类型::d 文件夹 - 普通文件 l 软文件 b块设备文件 p 管道文件 c 字符设备文件 s 套接口文件改动权限的方法 ch

2022-04-07 19:23:16 284

原创 每日一题 二分法、

class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size()<=1) { return nums.size(); } int next=1; int sz=nums.size(); int prev=0; int cur=0; while...

2022-04-07 15:33:36 101

原创 每日一题 力扣1

二分法class Solution {public: int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; if ((long long)mid * mid <= x) { ans = mid; l = m

2022-04-03 16:09:22 193

原创 c++之 继承、 多态

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

2022-02-17 10:39:56 1119

原创 数据结构回顾复习总结(一)(时间复杂度、空间复杂度)

一 复杂度::学习数据结构的意义在于可以使我们写的程序更加的高效率,而在写程序的时候离不开复杂度的考虑,下面先从2个循环小题目开始 了解为什么要考虑复杂度的概念。例题1,给定n个元素 求其中奇数的个数这个题目比较简单 我就这就给出代码了 其主要思想就是我们可以遍历n个元素的数组a 然后依次的辨别他们int count(int n,int a[]){ int Count=0;for(size_t i=0;i<n;i++){//依次判断每次元素是否符合题目要求 提示:

2022-01-21 09:52:08 672 1

原创 ROS话题通信

发布方#include"ros/ros.h"#include"std_msgs/String.h"#include<sstream>/* 包含头文件(ros中的文本类型三 std_msgs/ String.h) 初始化ros节点 创建节点句柄 创建发布者对象 编写发布逻辑并且发布数据 */int main(int argc, char *argv[]){ setlocale(LC_ALL,"");//避免乱码 /* code */ ros::init

2022-01-18 20:03:59 722

原创 delete和delete[]的区别

delete [ ] ptr 删除对象数组指向的指针。delete ptr 删除单个指针指向的内存。

2022-01-13 10:15:55 385

原创 list函数功能实现 超全

namespace yy{ template<class T> struct _list_node { T _val; _list_node<T>* _next; _list_node<T>* _prev; _list_node(const T& val = T()) :_val(val) , _prev(nullptr) , _next(nullptr) {} }; //节点 template&lt..

2022-01-12 20:01:58 339

原创 C++ vector 函数实现 带注释

vector的代码实现 话不多说上代码 拷贝下去就能跑using namespace std; namespace yuren_vector { //建立一个vector容器 template<class T> class vector { public: typedef T* Iterator; typedef const T* ConstIterator; Iterator begin() { return _start;..

2022-01-11 14:48:57 211

原创 c++string函数实现 已经加入注释解释 求赞

#pragma once#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include<assert.h>namespace yuren { class string // 管理字符串的数组,可以增删查改 // 字符串数组的结尾有\0 // 支持增删查改 { public: typedef char* iterator; typedef const char* const_iterator.

2022-01-10 19:29:35 171

原创 c++string的模拟实现函数

namespace yr{ // 管理字符串的数组,可以增删查改 // 字符串数组的结尾有\0 // 支持增删查改 class string { public: typedef char* iterator; typedef const char* const_iterator; iterator begin() { return _str; } const_iterator begin() const { return _str; } .

2022-01-10 14:11:07 290

原创 c++vector函数的各个模拟实现

#pragma once#include <assert.h>namespace yr{ template <class T> class vector { public: typedef T* iterator; typedef const T* const_iterator; vector() :_start(nullptr) , _finish(nullptr) , _endofstorage(nullptr) {} .

2022-01-10 14:09:39 239

原创 c 模拟一个strstr

int monistr(const char* str1, const char* str2){ //从str1中寻找str2; const char* prev = str1; const char* cur1 = str1; const char* cur2 = str2; const char* start = str2; while (*cur1!='\0') { if (*cur1 == *cur2) { prev++; cur1++; cur2++;.

2022-01-05 15:17:29 151

原创 c++模板 STL :string

1.泛型编程:使用模板编写跟类型无关的代码2函数模板:函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模 板就是将本来应该我们做的重复的事情交给了编译器,在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供 调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然 后产生一份专门处理double类型的代码,用不同类型的参数使用函数模板时,称为函数模板的实例化

2021-12-29 19:13:56 63

原创 友元和内存管理

友元友元分为:友元函数和友元类 友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多 用。友元函数可访问类的私有和保护成员,但不是类的成员函数。友元函数不能用const修饰友元函数可以在类定义的任何地方声明,不受类访问限定符限制一个函数可以是多个类的友元函数友元函数的调用与普通函数的调用和原理相同友元最重要的就是:友元是单向的,并且友元的关系是不能够传递的。以输入输出cin cout两个例子来理解友元 这里注意cout的类型可以理解为

2021-12-27 19:48:28 103

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

1 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 2 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成类的定义:class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。 类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。 类的两种定义方式:1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当...

2021-12-22 21:00:05 718

原创 链表 栈 队列 堆 二叉树 (超级详细)

目录链表栈队列堆二叉树链表栈队列堆二叉树

2021-12-20 13:24:16 913

原创 构造函数 析构函数 拷贝构造函数 运算符重载 this 指针

目录构造函数: 析构函数:拷贝构造函数this指针 :构造函数: 构造函数就是你在定义一个类对象的时候 它会自动调用 的一个函数,默认调用得到是无参构造函数,当然了 你也可以定义 缺省构造函数 引用构造函数, 构造函数的特征可以概括如下:1函数名与类名相同。2. 无返回值。3. 对象实例化时编译器自动调用对应的构造函数。4. 构造函数可以重载。 同时要明确构造函数的作用:务并不是开空间创建对象,而是初始化对象 析构函数: 析构函数也...

2021-12-19 22:35:24 610

原创 外排序 归并排序 超级详细 拜托点赞

外排序 就是比如说你在文件中你有很大的数组 你无法一起加载到内存中 只能一部分一部分的加载带内存中,然后对它进行排序,他的思想就是 我先分为几份,然后对每一份先排序,排完序后我再进行归并排序,具体步骤程序都标注明白了 。请看程序注释就可以 拿过来直接就可以跑另外 快速排序在这里就不给了 上一篇已经给了void _mergefile(const char* file1, const char* file2, const char* mergefile){ FILE* fout1 = fopen

2021-12-16 11:07:23 1504

原创 数据结构常见的八个排序

目录一 插入排序: 1,直接插入排序 2,希尔排序2希尔排序:选择排序堆排序交换排序 人名:冒泡排序 最简单的排序 但是稳定快速排序三种递归方法的实现:快速排序的非递归方法的实现::归并排序:计数排序一 插入排序: 1,直接插入排序 2,希尔排序1直接插入排序:基本思想 把待排序的记录按照器关键码值的大小逐个插到一个已经排好序的有序序列中,知道所有的记录插入完为止,得到一个新的有序序列。如插扑克牌直接插入排序的特性总结: 1. 元素集合越接近有序,直接...

2021-12-14 18:37:13 1368

原创 堆 与 栈 自学笔记 :

堆 与栈在不同的场景下的概念是不同的 如在内存的角度来看,堆与栈是两种不同的内存管理方式,而在数据结构的角度来看,堆heap与栈stack又是两种常用的数据结构。数据结构的角度下:栈是 先进后出 的 可以参考串糖葫芦栈的实现代码:::void StackInit(ST* ps){ assert(ps); ps->a = NULL; ps->top = 0; // ps->top = -1; ps->capacity = 0;}void Stack..

2021-12-10 14:12:53 172

原创 二叉树 节点个数 查找

二叉树的节点定义 遍历节点代码typedef int BTDataType struct BinaryTreeNode{struct BinTreeNode* _pLeft; // 指向当前节点左孩子 struct BinTreeNode* _pRight; // 指向当前节点右孩子 BTDataType _data; // 当前节点值域}二叉树的遍历分为前序遍历中序后序遍历二叉树叶子节点的个数// 二叉树叶子节点个数int BinaryTreeLeafSize(..

2021-12-08 20:36:12 570

原创 数据结构 堆升序:和二叉树的前序中序和后序的遍历

//从数组a中建立小堆的 2种方法void heapsort(int* a, int n, int k){ for (int i = 1; i < n; i++) { AdjustUp(a, i); }}void heapsort1(int* a, int n, int k){ int end = (n - 1 - 1) / 2; for (end; end >= 0; end--) { AdjustDown(a, n,end); }}void .

2021-12-07 21:40:21 343

原创 顺序表 链表 栈 二叉树 数据结构

顺序表顺序表 常用的有静态顺序表跟动态顺序表 常用动态顺序表代码实现顺序表 包括顺序表的pushhead pushback pophead pop back 可以与之前的通讯录结合起来:习题 原地移除数组中重复元素的数组int removeElement(int* nums, int numsSize, int val){int j=0;int count=numsSize;for(int i=0;i<numsSize;i++){ if(nums[i]!...

2021-12-06 21:48:45 573

原创 有序的符号 数据结构:

typedef char STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}ST;void StackInit(ST* ps);void StackDestroy(ST* ps);void StackPush(ST* ps, STDataType x);void StackPop(ST* ps);STDataType StackTop(ST* ps);int StackSize(ST*...

2021-12-03 16:49:59 326

原创 双向链表 带头循环

link.h#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>typedef int datatype;typedef struct doubleLSTNODE { datatype daa; struct doubleLSTNODE* prev; struct doubleLS

2021-12-03 14:43:24 139

原创 数据结构 19(04):链表的头增 尾增 头删 尾删 查找 打印:

查找: 指定位置处修改+指定位置处增加节点顺序表和链表的优缺点比较::顺序表优点:: 支持随机访问。顺序表缺点:空间不够了 需要扩容 扩容是由消耗的 头部或者中间位置的插入删除 需要挪动 挪动数据也是有消耗的 避免频繁扩容 一次一般都是按倍数去扩的 可能存在一定的空间浪费链表的优点:: 按需申请空间 不用了就释放空间头部中间插入删除数据 不需要挪动数据不存在空间浪费。fun.h#pragma once#define _CRT_SECURE_NO_WARNINGS...

2021-11-30 14:03:55 138

空空如也

空空如也

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

TA关注的人

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