自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux下本地Git仓库安装以及文件版本回退、撤销和删除操作

Linux下本地Git仓库安装以及文件版本回退、撤销和删除操作1. 在Linux上安装Git和创建版本库1.1 安装Git1.2 创建版本库1.3 把文件添加到版本库2. 时光穿梭机2.1 版本回退步骤2.2 工作区和暂存区2.3 管理修改2.4 撤销修改2.4.1 修改了工作区文件但是还没有`git add`2.4.2 修改了工作区文件而且`git add`了2.5 删除文件1. 在Linux上安装Git和创建版本库1.1 安装Git首先检查当前设备上有无git:$ gitThe program

2020-06-30 16:04:26 1335

原创 Linux下编译文件显示未找到动态库(“No such file or directory”)解决方法

Linux下编译文件显示未找到动态库(“No such file or directory”)解决方法我们编译程序的时候有时会加上各种链接库的命令,比如-lpthread等等,或者是我们自己创建的动态库,当动态库路径错误的时候会显示”No such file or directory“,下面提供三种坚决办法:1、找到xxxx.so放到 /usr/lib – 不推荐当安装的.so太多找不到可以使用以下方法sudo find /usr/local -name "xxxx.so"2、将xxx.

2020-06-28 17:34:09 6314

原创 Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)

Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装)1. 网络应用程序设计模式2. 分层模型3. 协议3.1 协议的概念3.2 协议格式3.2.1 以太网帧格式 -- 借助mac地址完成数据报传递3.2.2 IP段格式3.2.3 UDP数据包格式3.2.4 TCP数据报格式4. 数据的发送和接收5. TCP/UDP简要1. 网络应用程序设计模式1. C/S - client/server

2020-06-23 11:36:07 814

原创 牛客网刷题笔记6-22

1.在定义函数中指定的形参,在未出现函数调用是,它们占内存中的存储单元。( )A.正确B.错误答案:B解析:  在定义函数中指定的形参变量,在未出现函数调用时,它们并不占用内存中的存储单元,只有在发生函数调用时,函数中的形参才被分配内存单元。  在调用结束后,形参所占的内存单元也被释放,因此形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。  因此题中描述是错误的,本题选B。2.在下面有关友元函数的描述中,正确的说法是()A.友元函数是独立于当前类的外部函数B.

2020-06-22 15:36:27 1242 1

原创 10分钟搞定Linux多线程同步(互斥量,死锁、读写锁,条件变量,信号量,文件锁)

Linux C/C++多线程同步(互斥量,死锁,读写锁,条件变量,信号量,文件锁)1. 线程同步的一些概念1.1 同步的概念1.2 什么是线程同步1.3 多线程出现数据混乱(数据竞争)的原因2. 互斥量mutex2.1 mutex相关的函数和使用步骤2.1.1 初始化锁2.1.2 给共享资源加锁解锁2.2.3 摧毁锁2.2 互斥量使用的例子2.3 pthread_mutex_trylock3. 死锁4. 读写锁4.1 读写锁特性4.2 读写锁使用场景4.3 读写锁主要操作函数4.4 读写锁例子5. 条件变量

2020-06-18 16:41:23 1375

原创 C/C++程序内存布局

C/C++程序内存布局1. 运行可执行程序前的内存分区1.1 代码区text1.2 全局初始化数据区/静态数据区(data段)1.3 未初始化数据区(又叫 bss 区)2. 运行可执行程序后的内存分区2.1 代码区(text segment)2.2 未初始化数据区(BSS)2.3 全局初始化数据区/静态数据区(data segment)2.4 栈区(stack)2.5 堆区(heap)3. 变量作用域生命周期和储存位置总结1. 运行可执行程序前的内存分区  C代码经过预处理、编译、汇编、链接4步后生成一

2020-06-16 20:49:53 417

原创 C/C++变量的作用域

C/C++变量的作用域1. 局部变量2. 静态(static)局部变量3. 全局变量4. 静态(static)全局变量5. extern全局变量声明6. 全局函数和静态函数7. 总结C语言变量的作用域分为:代码块作用域(代码块是{}之间的一段代码)函数作用域文件作用域1. 局部变量局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:在一个函数内定义,只在函数范围内有效在复合语句中定义,只在复合语句中有效随着函数调用的结束或

2020-06-16 10:28:16 537

原创 线程的概念、优缺点和创建步骤

线程的概念、优缺点和创建步骤1. 什么是线程2. 线程共享资源与非共享资源3. 线程的优缺点4. 创建一个线程4.1 线程退出函数pthread_exit4.2 线程回收pthread_join4.3 杀死线程pthread_cancel4.4 线程分离pthread_detach4.5 判断两线程ID是否相等pthread_equal4.6 线程属性设置分离4.7 创建多个子线程5. 线程使用注意事项1. 什么是线程线程的概念:轻量级的进程,一个进程内部可以有多个线程,默认情况下一个进程只有一个线程

2020-06-15 12:49:44 620

原创 守护进程的概念和创建步骤

Linux守护进程1. 进程组2. 会话1. 进程组也称之为作业。进程组ID等于第一个进程ID,因此可以通过进程ID是否等于进程组ID来判断该进程是不是进程组的组长。只要进程组中有一个进程存在,进程组就存在,哪怕组长已经没了。一个进程可以为自己或子进程设置进程组ID。2. 会话由多个进程组组成。创建会话要注意以下5点:调用进程不能是进程组组长,该进程变成新会话首进程(session header)该进程成为一个新进程组的组长进程。新会话丢弃原有的控制终端,该会话没有控制终端。该调用进

2020-06-15 10:30:35 439

原创 vscode检测到#include错误,请更新includePath。解决方法

vscode检测到#include错误,请更新includePath。解决方法最近电脑重做,重新安装了一边vscode,但是写代码的时候发现头文件会标错,显示无法找到,下面是我的解决办法:执行命令查看g++包含路径g++ -v -E -x c++ -复制上面红框的内容在vscode中摁ctrl+shift+p搜索json文件在includePath里面粘贴红框的库路径,注意双引号和逗号格式如果再有问题,试试把"/usr/include",放在第一行,如上,解决问题......

2020-06-14 21:02:30 168382 87

原创 Windows10系统下安装Ubuntu和配置vscode

Windows10系统下安装Ubuntu和配置vscode1. 下载2. 安装3. 配置vscode4. 创建win与ubuntu公用文件夹5. 在ubuntu中软连接关联ubuntu文件夹6. 设置vscode的终端,使其默认打开wls终端win10下安装ubuntu请参考另一篇文章:如何在windows10下安装ubuntu子系统?安装vscode步骤:1. 下载进入官网vscode或者百度云直接下载:百度云下载链接提取码:bscx2. 安装3. 配置vscode安

2020-06-14 12:11:36 682

原创 把默认桌面路径为C盘更换为别的盘,以便重做系统之后桌面文件消失不见方法

点开我的电脑右键桌面,点击属性找到位置选项,更改位置,应用-确定

2020-06-14 11:11:26 3997 2

原创 编写makefile模板且一键创建到当前目录方法

编写makefile模板且一键创建到当前目录方法1. 编写makefile模板2. 添加alias到~/.bashrc3. 更新文件和使用1. 编写makefile模板makefile:#create by kuanyew 20200612SrcFiles=$(wildcard *.c)TargetFiles=$(patsubst %.c,%,$(SrcFiles))all:$(TargetFiles).PHONY:all clean%:%.c g++ -o $@ $< -lpt

2020-06-12 11:35:45 293

原创 Linux下IPC方式之信号2

Linux下IPC方式之信号(signal)二3. 信号集操作函数3. 信号集操作函数内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。...

2020-06-11 14:20:24 385

原创 Linux下IPC方式之信号1

Linux下IPC方式之信号(signal)一1. 信号的基本属性1.1 信号的特点1.2 信号的机制1.3 信号的产生1.4 信号的状态1.5 信号的处理方式1.6 阻塞信号集和未决信号集1.7 信号的四要素1.8 Linux常规信号一览表2. 信号的产生2.1 终端按键产生信号2.2 硬件异常产生信号2.3 `kill`函数/命令产生信号2.4 `raise`和`abort`函数2.5 时钟产生信号2.5.1 alarm函数2.5.2 setitimer函数1. 信号的基本属性1.1 信号的特点简

2020-06-10 16:23:14 469

原创 Linux下IPC方式之共享存储映射(mmap)

Linux下IPC方式之共享存储映射(mmap)1. 共享存储映射(mmap)2. mmap九问3. mmap实现父子进程通信4. 匿名映射5. mmap实现无血缘进程通信1. 共享存储映射(mmap)把文件中的某一段映射到内存上mmap函数原型:#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);参数:addr 建立映射

2020-06-09 20:05:30 512

原创 Linux下IPC方式之管道(pipe,fifo)

Linux下IPC(Interprocess Communication)方式之管道1. IPC方法2. 管道2.1 管道的概念2.2 pipe函数2.2.1 父子进程间通信简单举例2.2.2 父子进程实现pipe通信,实现ps aux | grep bash 功能2.3 管道的读写行为2.4 管道的大小和优劣2.5 FIFO通信1. IPC方法  Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交

2020-06-09 18:31:16 326

原创 vim操作补充

vim操作补充1. 移动光标2. 删除内容3. 复制粘贴4. 可视模式5. 内容查找6. 格式问题7. 插入模式8. 末行模式9. vim配置文件10. 查看函数帮助1. 移动光标操作作用0光标移动到行首$(shift+4)光标移动到行末gg光标移动到文首G光标移动到文末12G光标移动到第12行2. 删除内容操作作用x删除光标当前字符X删除光标前字符u恢复操作dw删除光标后的单词到空格d0

2020-06-08 16:31:04 213 2

原创 dup2和dup函数

dup2和dup函数1. dup22. dup1. dup2dup2的作用是使得 newfd 指向 oldfd 对应的文件,可以实现重定向。 int dup2(int oldfd, int newfd);关闭newfd对应的文件描述符,讲newfd重新指向为oldfd对应的文件文件描述符实际上是一个句柄,句柄指向一个文件。dup2的作用是使得 newfd 指向 oldfd 对应的文件。比如打开一个文件,使用dup2函数,上图就变成下图了(即原来指向/dev/tty的1指向了3指向的那个文件,

2020-06-08 15:47:51 753

原创 C语言小测5

C语言小测5只出现一次的数字 II给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99//leetcodeint singleNumber(int* nums, int numsSize){ int i,j...

2020-06-08 15:01:14 211

原创 C++Linux下文件IO基础

C++Linux下文件IO基础1. 系统api与库函数的关系2. `open`函数3. `close`函数4. `read`函数5. `write`函数6. `lseek`函数——移动文件读写位置6.1 `lseek`移动读写位置的例子6.2 `lseek`实现计算文件大小的例子6.3 `lseek`扩展文件实例7. `fcntl`函数1. 系统api与库函数的关系stdout里面有什么内容?fd,文件描述符,表示指向哪一个文件f_pos位置buffer缓冲区,默认是8k。缓冲区是为了减少IO

2020-06-08 13:52:09 639

原创 makefile基础

makefile1. makefile编写2. 执行makefile文件好处:一次编写,终身受益命名规则:makefile、Makefile三要素:目标、依赖、规则命令1. makefile编写写法:目标(target): 依赖(prerequiries)... tap键 规则命令(command)目标(target)通常是要产生的文件的名称,目标的例子是可执行文件或OBJ文件。目标也可是一个执行的动作名称,诸如‘clean’(仅仅表达动作的目标称为假想目标)。依赖是用来输入从而产生目

2020-06-07 17:51:14 255

原创 系统编程笔记

系统编程笔记exec函数族的使用如何用fork()函数创建指定数量个子进程?回收子进程-孤儿和僵尸进程,wait和waitpid方法未完,持续更新中…

2020-06-07 13:35:24 254

原创 C++函数级静态库和动态库的制作与使用

函数级静态库和动态库的制作与使用1. 静态库的制作与使用1.1 创建1.2 使用2. 动态库的制作与使用2.1 创建2.2 使用库的作用:分离编译代码重用分类:分类作用后缀静态库一个或多个.o目标文件归档在一个文件中.a动态加载库没有main函数的可执行文件,接口复合API.so1. 静态库的制作与使用1.1 创建文件举例:calc.cpp#include <iostream>#include "calc.h"using na

2020-06-07 13:31:25 270

原创 系统编程-回收子进程-孤儿和僵尸进程,wait和waitpid方法

系统编程-回收子进程-孤儿和僵尸进程,wait和waitpid方法1. 孤儿进程2. 僵尸进程3. 子进程回收3.1 wait3.2 waitpid3. wait和waitpid的区别1. 孤儿进程孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。危害:没什么危害…产生孤儿进程的举例:#include <stdio.h>#include <unistd.h>int main(){ pid_t pid

2020-06-05 15:13:44 447

原创 系统编程-如何用fork()函数创建指定数量个子进程?

C++如何用fork函数创建指定数量个子进程?fork函数:创建一个子进程。pid_t fork(void);失败返回-1;成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0一般我们if(pid == 0){ //子进程}else if(pid > 0){ //父进程 //此时pid为子进程id}pid_t类型表示进程ID,但为了表示-1,它是有符号整型。(0不是有效进程ID,init最小,为1)注意返回值,不是fork函数能返回两个值,而是fork后,fork

2020-06-04 21:53:38 941

原创 系统编程-exec函数族的使用

C++exec函数族  fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户控件代码和数据完全被新程序替换,从新程序的启动例程开始执行。执行exec并不创建新进程,所以调用exec前后该进程的id并未改变。  将当前进程的.text、.data替换为所要加载的程序的.text、.data,然后让进程从新的.text第一条指令开始执行,但进程ID不变,换核不换壳。 //该函数通常用来调

2020-06-04 21:11:15 311

原创 LeetCode-160-相交链表

编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0

2020-06-04 13:51:05 91

原创 LeetCode-92-反转列表2

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-iiclass Solution {public: Lis

2020-06-03 21:55:32 219

原创 C++写时拷贝技术

C++写时拷贝技术1. 深拷贝与浅拷贝概念和优缺点2. 写时拷贝技术1. 深拷贝与浅拷贝概念和优缺点浅拷贝:只拷贝指针地址。通常默认拷贝构造函数与赋值运算符重载都是浅拷贝。成员变量中没有指针的情况可以直接使用浅拷贝。优点:共享一份内存,节省空间缺点:在释放的时候可能会多次释放,造成内存泄漏深拷贝:重现分配堆内存,拷贝指针指向内容。例如:String类优点:每个指针指向不同的地址,避免了多次的释放缺点:重复数据较多,占用空间写时拷贝技术就是结合了深拷贝和浅拷贝各自的优点,实现数据相同时

2020-06-03 18:01:35 263

原创 C++类型萃取

C++类型萃取功能应用场景实现功能  类型萃取,可以在模板中萃取到变量类型,对不同变量进行不同处理,可以提升程序效率.  也就是我根据你传递过来的类型,我再决定调用那种方法  在STL中用到的比较多,用于判断一个变量是否为POD类型.  简述来说可以用来判断出某个变量是内置类型还是自定义类型.应用场景比如我们实现顺序表,在对顺序表进行扩容时,就靠重新开辟内存、拷贝对象.拷贝对象时,就有两种情况:一种是类型,比如int char…;还有一种是自定义类型,Data类、String类.对于内置

2020-06-03 16:09:06 829

原创 自己实现一个STL的vector容器

封装了vector的数据结构,和push_back(),capacity(),size()方法,内嵌了iterator迭代器类#include <iostream>// #include <vector>using namespace std;namespace miniSTL{template<typename T>class vector{ T* _data; size_t _size;// 元素个数 size_t _capacit

2020-06-02 21:14:34 363

原创 自己实现一个STL的list容器

封装了list的数据结构,和push_back(),push_front(),pop_back(),pop_front(),size()方法,内嵌了iterator迭代器类,还写了for_each()和accumulate()模板算法#include <iostream>// #include <algorithm>// #include <list>#include <exception>using namespace std;namespac

2020-06-02 21:12:21 266 3

原创 C++文件读写

C++文件读写1. 文件流类和文件流对象2. 打开文件3. 关闭文件4. 小例子1. 文件流类和文件流对象输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操作,他们分别是ifstream、ofstream、fstream,其中fstream类是由iostream

2020-06-02 20:23:00 280

原创 C++标准输入流对象cin需重点掌握的函数

C++标准输入流对象cin需重点掌握的函数1. cin.get()2. cin.getline()3. cin.ignore()4. cin.peek()5. cin.putback()1. cin.get()cin.get() 一次只能从缓冲区拿走一个字符void test01(){ // 输入as 缓冲区中 a s 换行 第一个拿 a 第二个 拿 s 第三次拿换行 第四次等待下次输入 char c = cin.get(); cout << "c = " &l

2020-06-02 17:11:12 286

原创 C++异常处理

C++异常处理1. 异常基本概念1.1 c++异常机制相比C语言异常处理的优势?2. 异常语法2.1 异常基本语法2.2 栈解旋(unwinding)2.4 异常接口声明2.5 异常变量生命周期2.6 异常的多态使用3. C++标准异常库3.1 标准库介绍3.2 编写自己的异常类1. 异常基本概念  异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等)。  在C语言的世界中,对错误的处理总是围绕着两种方

2020-06-02 14:41:56 555

原创 C++运用静态成员实现单例模式

C++运用静态成员实现单例模式  单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。  Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其默认构造函数和拷贝构造函数设计为私有;在单

2020-06-01 17:36:18 1573

原创 C++四种类型转换,static_cast、dynamic_cast、const_cast、reinterpret_cast

C++四种类型转换,static_cast、dynamic_cast、const_cast、reinterpret_cast1. 静态转换(static_cast)2. 动态转换(dynamic_cast)3. 常量转换(const_cast)4. 重新解释转换(reinterpret_cast)  类型转换(cast)是将一种数据类型转换成另一种数据类型。例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型。  转换是非常有用的,但是它也会带来一些问题,比如在转换指针时,我们

2020-06-01 16:54:39 375

原创 C++类模板在不同情况下的使用

C++类模板1. 类模板用于实现类所需数据的类型参数化2. 类模板中成员函数 一开始不会创建出来,而是在运行时才去创建3. 类模板做函数参数3.1 指定传输类型3.2 参数模板化3.3 整体模板化4. 类模板派生普通类5. 类模板派生类模板6. 类模板类内实现7. 类模板类外实现8. 模板类碰到友元函数类模板和函数模板的定义和使用类似。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。1. 类模板用于实现类所需数据的类型参数化类模板可以有默认参数,比如:template<typena

2020-06-01 14:13:22 1041 1

原创 C++函数模板的局限性以及解决方法(模板的特化)

C++模板的局限性以及解决方法(模板的特化)模板的局限性模板的特化(此处仅展示函数模板的特化)模板的局限性假设有如下函数模板:template<class T> void f(T a, T b) { … }  如果代码实现时定义了赋值操作 a = b,但是T为数组,这种假设就不成立了,同样,如果里面的语句为判断语句 if(a>b),但T如果是结构体,该假设也不成立,另外如果是传入的数组,数组名为地址,因此它比较的是地址,而这也不是我们所希望的操作。  总之,编写的模板函数很

2020-06-01 11:33:44 537

EM&K-means_Cluster segmentation.zip

两种算法:1.使用EM算法对3通道彩色图片进行聚类分割,给出误差; 2.使用K-means算法对3通道彩色图片进行聚类分割,给出误差。 两者都需要输入聚类个数的数组,实现分割。

2021-03-13

GMM_Clustering .m

MATLAB程序。选择图片,选择要聚类的K值(聚类数),使用高斯混合模型聚类对3通道彩色图像进行分割

2021-03-13

thread_pool.c

利用生产者-消费者模式,领导者-追随者模式实现线程池的动态增加删减实现多线程任务,main函数可自定义线程池最大和最小个数,任务队列的个数

2020-07-26

空空如也

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

TA关注的人

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