自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下的进程间通信方式及实现

Linux下的进程间通信方式及实现进程间通信的目的进程间通信的目的主要是为了:1、数据传输:实现不同进程之间的数据传输2、资源共享:实现多个进程共享资源3、通知事件:实现进程之间的消息传递4、进程控制:实现进程对其余进程的控制进程间通信方式的分类:标准分类管道命名管道和匿名管道System V标准的IPC消息队列,共享内存,信号量POSIX 标准的IPC消息队列,共享内存,信号量,互斥量,条件变量,读写锁管道...

2020-08-18 17:41:25 1098

原创 Linux下的IO操作

Linux下的IO操作C语言中的IO操作函数描述fopen打开一个文件fwrite向指定文件写入数据fread从文件读取数据fseek指定当前文件下的光标位置fclose关闭一个文件(注意,在文件试用网完毕后要关闭文件,避免造成资源泄漏)example:向文件写入数据:从文件读取数据输出数据到终端:文件打开方式的总结:打开方式描述r只读方式打开r+读写方式打开,文件不存在则报错,文件存在则清空

2020-08-17 00:34:59 387 2

原创 Linux下的进程控制

Linux下的进程控制1、进程创建Linux下采用fork创建一个新进程,新进程为原来进程的子进程#include <unistd.h>pid_t fork(void);返回值,出错返回-1,父进程返回子进程的ID,子进程返回0当一个进程调用fork以后,就会有两个二进制代码相同的进程,自此之后,父子进程分别执行各自的功能。从如上的程序运行来看,当程序fork以后,自此之后的程序各自运行各自的程序,而不会打印两次before的内容注意,至于是两个进程谁先运行时取决于

2020-08-15 20:24:24 517

原创 Linux下的进程概念

Linux下的进程概念1、冯诺依曼体系结构美籍匈牙利数学家冯·诺伊曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺伊曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺伊曼的这个理论称为冯·诺伊曼体系结构。1、采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,如果是不正确的指令格

2020-08-14 01:01:53 288

原创 Linux的编译器,调试器和项目的自动化构建工具

Linux的编译器,调试器和项目的自动化构建工具1、Linux的编译器gcc&g++代码必须编译成可执行程序才可以运行gcc&g++完成四步操作1、预处理(头文件展开和宏替换)2、编译(生成汇编代码)3、汇编(生成机器指令)4、链接(生成可执行程序)命令:gcc [选项] 需要编译的文件 [选项] 生成的目标文件功能:进行程序的预处理,编译,汇编,链接操作预处理:gcc -E 需要预处理的文件 -o 生成的目标文件.i1.主要包括宏替换,文件包含,条

2020-08-13 01:00:37 274

原创 Linux基本工具的使用

Linux基本工具的使用1、软件包管理工具yum软件包是Linux下将预先编译好的源代码进行打包,我们可以通过软件包管理工具yum获取软件包进行安装。软件包和软件包管理工具的关系相当于软件和应用商店的关系。yum的所有操作必须保证网络畅通命令:ping www.baidu.com功能:查看网络是否畅通查看软件包命令:yum list | grep 软件包功能:查看软件包安装软件命令:sudo yum install 软件包功能:安装软件卸载软

2020-08-12 00:29:35 126

原创 Linux权限的分配和和管理

Linux权限管理1、文件访问者代表描述u(user)文件和文件目录的所有者g(group)文件和文件目录所属组o(others)其他用户2、文件类型和文件的访问权限文件类型表示描述d目录文件-普通文件l软链接文件b块设备文件p管道文件c字符设备文件s套接口文件文件的访问权限表示描述r可读(文件可读,目录可浏览)w可写(文件可修改,目录可修改)

2020-08-11 00:48:03 189

原创 Linux下的基础指令

Linux下的基础指令目录和文件相关指令1、ls指令命令:ls [选项][目录文件]功能:列出指定目录文件的信息常用选项:选项描述-a列出所有文件,包含以.开头的隐藏文件-d将目录像文件一样显示-i输出文件的inode节点信息-k以字节的形式显示文件的大小-l列出文件的详细信息-n用数字的UID,GID代替名称-F在每个文件名后附上一个字符说明该文件的类型(‘*’代表可执行的普通文件,‘/’表示目录文件,‘@’表示符

2020-08-10 00:25:38 171

原创 Linux的安装和配置方法

初识Linux操作系统Linux概念Linux是一个操作系统,Linux提供了一个操作系统中最底层的硬件控制与资源管理的完整架构,这个架构继承了Unix良好的传统而来,使得Linux相当的稳定且强大。此架构可以在个人计算机(x86系统)上运行。Linux的安装和配置方法1、下载虚拟机2、获取CentOs镜像3、创建自己的虚拟机4、下载XShell使用XShell远程登录Linux1、使用ifconfig命令查看主机IP地址2、输入SSH命令远程登录虚拟机(注必须保证虚拟机联网)SSH

2020-08-09 22:27:35 182

原创 unorered_multiset的介绍及使用

unorered_multiset的介绍及使用1、unorered_multiset的介绍1、无序集是一种容器,它以不特定的顺序存储惟一的元素,并允许根据元素的值快速检索单个元素。2、在unordered_set中,元素的值同时是唯一标识它的键。键是不可变的,因此,unordered_set中的元素不能在容器中修改一次——但是它们可以插入和删除。3、在内部,unordered_set中的元素没有按照任何特定的顺序排序,而是根据它们的散列值组织成桶,从而允许通过它们的值直接快速访问单个元素(平均时间

2020-05-29 22:02:27 310

原创 unordered_multimap的介绍及使用

unordered_multimap的介绍及使用1、unordered_multimap的介绍1、无序容器是存储由键值和映射值组合而成的元素的关联容器,非常类似于unordered_map容器,但是允许不同的元素具有等价的键。2、在unordered_数百万ap中,键值通常用于惟一地标识元素,而映射的值是一个对象,其中包含与该键相关联的内容。键和映射值的类型可能不同。3、在内部, unordered_multimap中的元素没有在任何特定的顺序排序对关键或映射值, 但组织成桶取决于他们的散列值,

2020-05-29 21:55:56 4873

原创 unordered_set的介绍及使用

unordered_set的介绍及使用1、unordered_set的介绍1、无序集是一种容器,它以不特定的顺序存储惟一的元素,并允许根据元素的值快速检索单个元素。2、在unordered_set中,元素的值同时是唯一标识它的键。键是不可变的,只可增删,不可修改3、在内部,unordered_set中的元素没有按照任何特定的顺序排序,而是根据它们的散列值组织成桶,从而允许通过它们的值直接快速访问单个元素(平均时间复杂度为常数)。4、unordered_set容器比set容器更快地通过它们的键访问

2020-05-28 21:35:33 18362

原创 unordered_map的介绍及使用

unordered_map的介绍及使用1、unordered_map的介绍1、unordered_map是存储<key, value>键值对的关联式容器,其允许通过key快速的索引到与其对应的value2、unordered_map中,键值通常用于惟一的标识元素,而映射值是一个对象,其内容与此键关联,键和映射的类型可以不同3、在内部,unordered_map没有对<key, value>进行排序,unordered_map将相同哈希值的键值对放在对应的桶中4、unord

2020-05-28 21:20:39 6969

原创 multiset的介绍及使用

multiset的介绍及使用1、multiset的介绍1、multiset是按照特定顺序存储元素的容器,其中元素是可以重复的2、在multiset在,元素的value也会识别它组成的键值对,multiset元素的值不能在容器中进行修改,但可以插入和删除3、在内部,multiset按照特定的严格弱排序准则进行排序4、multiset容器通过key访问单个元素比unordered_multiset容器慢,但当使用迭代器遍历的时候,会得到一个有序序列5、multiset的底层是二叉搜索树(红黑树)

2020-05-28 21:06:51 14549

原创 set的介绍及使用

set的介绍及使用1、set的介绍1、set是按照一定的次序存储元素的容器2、在set中,元素value也标识它(value就是key,类型为T),并且每个value必须是惟一的3、set允许插入和删除,不允许修改4、set按照内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序5、set在底层用二叉搜索树(红黑树)实现注:1、set中只放value,但是底层存放的是<value, value>的键值对2、set插入元素只需呀插入value即可3、set中的元素唯

2020-05-28 20:54:13 2164

原创 multimap的介绍及使用

multimap的介绍及使用1、multimap的介绍1、multimap是关联式容器,它按特定的次序(按照key来比较)存储由键key和值value组合而成的元素,多个键值对之间的key可以重复2、在multimap中,键值key通常用于排序和唯一标识元素,值value中存储与键key关联的内容。3、multimap按照指定的严格弱排序对key进行排序4、multimap中通过键值访问单个元素比unordered_multimap容器慢,使用迭代器直接遍历multimap的元素可以得到关于ke

2020-05-28 20:32:18 28507 6

原创 map类的介绍及使用

map的介绍及使用1、map的介绍1、map是关联式容器,它按特定的次序(按照key来比较)存储由键key和值value组合而成的元素2、在map中,键值key通常用于排序和唯一标识元素,值value中存储与键key关联的内容。3、map按照键key来比较排序4、map中通过键值访问单个元素比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代5、map支持下标访问,即map[key] = value6、map的底层通常是平衡二叉搜索树(红黑树)2、map的构造

2020-05-28 18:40:33 1605

原创 C++中的类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit关键字)

C++中的类型转换1、C语言中的类型转换分为隐式类型转换和显示类型转换1.2、C语言中的类型转换存在缺陷1、隐式类型转换可能出现未知错误2、显示类型转换导致代码不够清晰3、转换的可视性差,难以追踪错误#include <stdlib.h>#include <string.h>#include <stdio.h>int main()...

2020-05-01 22:43:09 125

原创 智能指针(RAII技术,auto_ptr,unique_ptr,shared_ptr)

智能指针1、智能指针解决的问题1、内存泄漏问题,开辟出来的空间没有进行释放,存在内存泄漏2、异常安全问题,若是malloc和free之间若是存在抛出异常,会出现内存泄漏2、智能指针的使用及原理2.1、RAII技术RAII(Resource ACquisition Is Initialization)是利用对象生命周期来控制程序资源(内存,文件句柄,网络连接,互斥量)的技术在...

2020-05-01 22:30:12 347

原创 C++中的异常

C++中的异常1、C语言中的异常处理办法传统的异常处理方式:1、终止程序,比如assert2、返回错误码,需要程序员去查对应的错误码3、C标准库中setjmp和longjmp组合2、C++中的异常概念异常是一种处理错误的方式,当函数发现自己无法处理的错误就可以抛出异常,让函数的调用者来处理这个错误throw:用throw抛出异常catch:用catch来捕获异常一个th...

2020-04-26 22:06:58 190

原创 C++中的多态(多态原理,单继承及多继承中的序表)

C++中的多态1、多态的概念多态指的是在不同继承关系的类对象中,去调用同一函数产生的不同行为构成多态的条件:1、必须通过基类指针或引用调用虚函数2、派生类必须对基类的虚函数进行重写#include <iostream>using namespace std;class Person{public: virtual void doSomething()...

2020-04-24 21:50:47 143

原创 C++中的继承

C++中的继承1、继承的概念1.1、继承的概念继承是面向对象程序设计语言使代码可以复用的手段,它允许程序在保持原有类的基础上进行扩展,怎还功能,这样产生的新类称为派生类,继承呈现了面向对象程序设计的层次结构,继承是设计层次的复用#include <iostream>#include <string>using namespace std;//继承机制是...

2020-04-22 17:35:25 195

原创 C++的IO流

C++的IO流1、C语言的输入输出C语言用的输入输出方式是scanf()和printf()scanf()是指从标准输入设备读取数据,将输入存放在变量中printf()是指将指定的文字/字符输出到标准输出设备输入输出缓冲区:1、可以屏蔽掉低级IO,实现可移植的程序2、可以使用这部分的内容实现“行”读取的行为2、流的概念2.1、流的概念“流”即是流动的意思,是物质从一处向...

2020-04-17 16:18:57 131

原创 再谈模板(非类型模板参数,模板特化,模板特化的应用,类型萃取, 模板的分离编译, 模板的优缺点)

再谈模板1、非类型模板参数模板参数分为类类型参数和非类型参数类类型参数:出现在模板参数列表中,跟在class或者typename的参数类型名称非类型参数:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可以将该参数当成常量使用注:1、浮点数,类对象以及字符串不允许作为非类型模板参数2、非类型模板参数必须在编译器就能确认结果#include <iostre...

2020-04-15 17:31:26 301

原创 priority_queue的介绍使用及模拟实现

priority_queue的介绍使用及模拟实现1、priority_queue的介绍1、优先队列是一种容器适配器,它的特点是第一个元素总是最大或者最小的2、优先队列提供的操作有判空、返回堆顶、尾插、尾删3、优先队列可以看做是大根堆,小根堆4、优先队列默认使用vector作为其底层5、优先队列需要支持随机访问迭代器,以便始终在内部保持堆结构,容器适配器通过在需要时自动调用算法函数ma...

2020-04-13 15:03:02 128

原创 queue的介绍使用及模拟实现

queue的介绍及模拟实现1、queue的介绍1、队列是一种容器适配器,其特点是先进先出2、队列提供的操作有判空、返回队首队尾元素、入队、出队等操作3、队列的底层默认使用deque实现2、queue的基本操作函数声明接口说明queue()构造空的队列empty()检测队列是否为空,是返回true,否则返回falsesize()返回队列中有效元素...

2020-04-13 14:44:02 319

原创 stack的介绍使用及模拟实现

stack的介绍及模拟实现1、stack的介绍1、stack是一种容器适配器,这种适配器的特点是后进先出2、stack是作为容器适配器被实现的3、stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,支持判空、返回栈顶、入栈,出栈的操作4、默认使用deque作为stack的底层2、stack的基本操作函数说明接口说明stack()构造空的栈...

2020-04-13 14:38:42 260

原创 deque的介绍及使用(deque的构造, 拷贝构造, 迭代器, 基本操作,增删改查, deque的应用场景)

deque的介绍及使用1、deque是双端队列,双端队列是动态大小的序列式容器2、deque是动态数组,允许通过随机访问迭代器直接访问单个元素3、deque不能保证元素都存储在连续的空间,deque加指针偏移会导致非法4、deque分布在不同的存储块中5、deque在头尾进行操作时的效率最高,其他性能较差1、deque的构造函数声明接口说明deque() 构造...

2020-04-10 16:00:01 2042

原创 vector和list的对比

vector和list的对比vectorlist底层结构动态顺序表,一段连续空间带头结点的双向循环链表随机访问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素效率O(N)插入和删除任意位置插入和删除效率低,时间复杂度为O(N),插入时有可能需要增容,增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低任意位置插入和删除效率高,时间复...

2020-04-09 20:25:31 256

原创 list的模拟实现(list的构造, 赋值运算符重载, 迭代器, 前置++ -- 后置++ --, 插入删除, 容量操作等)

list的模拟实现list.h#include <iostream>using namespace std;namespace gwp{ template <class T> class ListNode { public: ListNode(const T& val = T()) :m_prev(nullptr) , m_...

2020-04-09 20:16:47 248

原创 list的介绍及使用(构造, 迭代器, 使用, 迭代器失效的处理办法)

list的介绍及使用1、list是可以在常数范围类任意位置进行插入和删除的序列式容器,可以前后双向迭代2、list的底层是双向带头循环链表3、list个forword_list类似,最大的不同是forword只能向前迭代。4、list在任意位置插入删除的效率较高5、list不支持随机访问1、list类的构造构造函数( (constructor))接口说明lis...

2020-04-08 16:48:59 614 1

原创 vector类的模拟实现(包括vector的构造,拷贝构造, 赋值运算符重载,中括号运算符重载, 迭代器, 增删改查, 包括三种insert, 两种erase)

vector类的模拟实现Vector.h#pragma once#include <iostream>#include <algorithm>using namespace std;namespace gwp{template <class T>class vector{public: typedef T* iterator;...

2020-04-07 21:48:37 459

原创 vector类的介绍(构造, 访问及遍历, 容量操作及空间增长问题, 增删改查, 迭代器失效场景)

vector类vector类简介1、vector表示变长数组的序列容器2、vector类采用连续空间存储,大小可变,可以对元素像数组一样下标访问3、vector使用动态分配数组来存储它的元素4、vector在访问元素的时候更加高效,尾插尾删的效率高效。1、vector类的构造(constructor)构造函数声明接口说明vector()无参构造vect...

2020-04-05 13:02:45 243

原创 string类的模拟实现(包含String的构造,拷贝构造,赋值运算符重载,析构,增删改查, 容量操作,比较运算符和输入输出运算符重载)

string类的模拟实现1、传统版的string模拟实现#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cassert>#include <cstring>using namespace std;class String{public: String(const c...

2020-04-04 13:03:54 230

原创 string类的介绍(构造,容量操作,访问及遍历操作, 修改操作, 非成员函数, )

string类1、string是表示字符序列的类2、标准的string类提供了对此类对象的支持,并添加了专门用来操作单字节字符的设计特性3、string类是使用char,使用它的默认char_traits和分配器类型4、string类是basic_string模板类的一个实例 typedef basic_string<char, char_traits, allocator&gt...

2020-04-04 12:46:53 125

原创 STL简介(STL的六大组件)

STL简介1、STL概念STL(standard template libaray 标准模板库)是C++标准库的重要组成部分,不仅仅是一个可复用的组件库,而且是一个保罗数据结构和算法的软件框架。2、STL的六大组件容器:string、vector、list、deque、map、set、multimap、multiset算法:find、swap、reverse、sort、merg...

2020-04-02 14:43:00 619

原创 初识模板(泛型编程, 函数模板, 函数模板的实例化, 类模板, 类模板的实例化)

初识模板1、泛型编程编写与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础2、函数模板2.1、函数模板的概念函数模板代表一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本2.2、函数模板的格式template<typename T1, typename T2, …, typename Tn>返回值类型 函数名(...

2020-04-01 16:32:35 143

原创 单例模式(饿汉模式和懒汉模式实现)

单例模式单例模式的概念一个类智能创建一个对象,单例模式可以保证系统中该类只有一个实例,并提供一个访问他的全局访问点,该实例被所有程序模块共享饿汉模式不管用不用,程序启东时就创建一个唯一的实例对象优点:简单缺点:可能会导致进程启动慢,且如果有多个单例模式对象实例启动顺序不确定#include <iostream>using namespace std;cla...

2020-03-31 21:05:38 334

原创 C++动态内存管理(C语言/C++的动态内存分配方式,new 和delete重载,实现原理, 定位new表达式,malloc/free和new/delete联系和区别)

C++动态内存管理首先了解C语言C++内存区域划分1、内核空间:用户代码不能读写2、栈区:非静态局部变量/函数参数/返回值(向下增长)3、内存映射段:高效的IO映射方式,用于装载一个共享的动态内存库,用户可使用系统结构创建共享内存,做进程间通信4、堆区:程序运行时动态内存分配5、数据段:存储全局数据和静态数据6、代码段:可执行代码/只读常量1、C语言动态内存管理方式C语言用...

2020-03-31 20:58:45 530

原创 再理解类与对象(再谈构造函数,explicit关键字, static关键字, C++11初始化的新方法, 友元函数, 友元类, 内部类)

再理解类与对象1、再谈构造函数1.1、构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。构造函数体中的语句只能将其称作为赋初值,而不能称作初始化,因为初始化只能初始化一次,而构造函数体内可以多次赋值1.2、初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式注:1、每个成...

2020-03-30 14:57:02 194

空空如也

空空如也

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

TA关注的人

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