自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL- 常用拷贝和替换、算术生成、集合算法

STL常用拷贝和替换算法copy功能描述:容器内指定范围的元素拷贝到另一容器中函数原型copy(iterator beg, iterator end, iterator dest);// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置// beg 开始迭代器// end 结束迭代器// dest 目标起始迭代器注意:利用copy算法在拷贝时,目标容器记得提前开辟空间replace功能描述:将容器内指定范围的旧元素修改为新元素函数原型:replace(itera

2020-08-09 10:29:05 226

原创 STL- 常用遍历、查找、排序算法

STL- 常用算法概述:算法主要是由头文件 组成。 是所有STL头文件中大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 体积很小,只包括几个在序列上面进行简单数学运算的模板函数 定义了一些模板类,用以声明函数对象。常用遍历算法for_each功能描述:实现遍历容器函数原型:for_each(iterator beg, iterator end, _func);// 遍历算法 遍历容器元素// beg 开始迭代器// end 结束迭代器// _func

2020-08-08 17:30:27 284

原创 函数对象/内建函数对象

函数对象概念:重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数函数对象使用特点:函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值 函数对象超出普通函数的概念,函数对象可以有自己的状态 函数对象可以作为参数传递示例:#include <string>#include <iostream>using namespace std; //1、函数对

2020-08-08 16:15:41 224

原创 map/ multimap容器

map简介:map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用红黑树实现。优点:可以根据key值快速找到value值map和multimap区别: map不允许容器中有重复key值元素 multimap允许容器中有重复key值元素map构造和赋值功能描述:对map容器进行构造和赋值操作函数原型:构造map<T1, T2&g

2020-08-08 13:17:07 173

原创 set/multiset 容器

set简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用红黑树实现。set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素set构造和赋值功能描述:创建set容器以及赋值构造:set<T> st; //默认构造函数: set(const set &st); //拷贝构造函数赋值:set& operator=(const

2020-08-07 14:10:28 369

原创 list容器

list基本概念功能:将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一个双向循环链表注意:由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器list的优点:采用动态存储分配,不会造成内存浪费和溢出 链表执行插入和删除操作十分方便,修改指针即可,不需要移

2020-08-07 13:18:19 104

原创 Stack和Queue容器

stack概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为 — 入栈 push栈中弹出数据称为 — 出栈 popstack 常用接口功能描述:栈容器常用的对外接口构造函数:stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const stack &stk);

2020-08-06 14:01:13 136

原创 deque容器

deque容器功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度回比vector快 vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间注意:deque容器的迭代器也是支持随机访问的deq

2020-08-06 11:57:54 195

原创 Vector容器

vector功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别: 不同之处在于数组是静态空间,而vector可以动态扩展vector容器的迭代器是支持随机访问的迭代器动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector构造函数功能描述:创建vector容器函数原型vector<T> v; //采用模板实现类实现,默认构造函数 vector(v

2020-08-05 18:49:38 407

原创 String

string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char * 区别:char * 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。特点:string 类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete 替换replace,插入insert string管理char所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责string构造函数构造函数原型:stri

2020-08-05 13:17:06 83

原创 初见STL

STL长久以来,软件界一直希望建立一种可重复利用的东西 C++的面向对象和泛型编程思想,目的就是复用性的提升 大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准,诞生了STL在C++标准中,STL被组织为下面的13个头文件:algorithm、deque、functional、iterator、vector、list、map、memory.h、numeric、queue、set、stack和utility。基本概念STL(Standard Temp

2020-08-04 19:47:29 123

原创 两数之和I

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。题目来源:力扣(LeetCode)例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]这道题在题库中属于简单难度最简单的解题方式就是暴力解题法即就是直接用嵌套循环来暴力搜索符合条件

2020-07-21 21:06:48 199

原创 Linux---IO复用(libevent库)

LibeventLibevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kq...

2020-03-12 15:04:09 277

原创 Linux守护进程

守护进程又叫精灵进程,在linux或者unix操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断会话:进程组的更高一级...

2020-03-11 16:50:22 189

原创 数据结构(快速排序——非递归实现)

快速排序快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。在之前已经说过了快速排序的递归实现递归实现:https://blog.csdn.net/wfea_lff/arti...

2020-02-18 16:18:21 855 2

原创 数据结构(串匹配—KMP算法)

KMP算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特–莫里斯–普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)KMP算法相当于对BF算法...

2020-02-18 15:24:56 252

原创 数据结构(串匹配—BF算法)

BF算法BF算法即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。BF算法(朴素算法) 思想简单 效率比较低下时间复杂度:O(n*m)n:为S串的长...

2020-02-17 17:49:57 2610

原创 数据结构(快速排序——递归实现)

快速排序快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度:O(nlogn)空间复杂度:O(logn)稳定性:不稳定排序过程如图所示:上图是进行一趟快速排...

2020-02-16 14:43:34 374

原创 Linux--I/O多路复用(epoll)

I/O多路复用I/O多路复用是在多线程或多进程编程中常用技术。主要是通过select/epoll/poll三个函数支持的,就是通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流,I/O 多路复用技术通过把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求在之前我们运用多线程的方式也完成了一个可以同时处理客户端的TCP...

2020-02-12 19:34:34 162

原创 Linux生产者消费者问题

生产者消费者模型描述:生产者/消费者问题可以描述为:两个或者更多的进程(线程)共享同一个缓冲区,其中一个或多个进程(线程)作为“生产者”会不断地向缓冲区中添加数据,另一个或者多个进程(线程)作为“消费者”从缓冲区中取走数据。生产者/消费者模型关注的是以下几点: 1.生产者和消费者必须互斥的使用缓冲区 2.缓冲区空时,消费者不能读取数据 3.缓冲区满时,生产者不能添加数据生产者/消费...

2020-02-12 14:44:26 1835

原创 数据结构(基数排序)

基数排序基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用,其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。时间复杂度: O(m(n+r))空间复杂度 : O(n+r)...

2020-02-10 17:42:09 2654 1

原创 数据结构(希尔排序)

希尔排序希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因D.L.Shell于1959年提出而得名之前我们已经讲过直接插入排序直接插入排序:https://blog.csdn.net/wfea_lff/article/details/104002438这里就不多说了,直接进入主题时间复杂度: O(n^1.3 ~ n^1.5)空间复...

2020-02-09 20:42:04 483

原创 Linux--I/O多路复用(select)

I/O多路复用I/O多路复用是在多线程或多进程编程中常用技术。主要是通过select/epoll/poll三个函数支持的,就是通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流,I/O 多路复用技术通过把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求在之前我们运用多线程的方式也完成了一个可以同时处理客户端的TCP...

2020-02-09 16:03:43 157

原创 编译链接(预编译,编译,汇编,链接)

编译链接一个程序要变成一个进程需要将指令和数据加载进内存中就可以了,而在变成进程的过程需要五步来完成所有的操作系统只识别机器码,也就是0,1码,即二进制我们所学的C/C++等语言都属于高级语言越接近机器语言的就是低级语言比如汇编语言在高级语言转换成机器码的过程中,并不是直接变成机器语言,而是先变成汇编语言,在变成机器码一、预编译(生成.i文件)1.、删除#define并作文本替换2...

2020-02-08 16:11:38 1032

原创 虚拟地址

虚拟地址虚拟地址是程序运行在保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址。那为什么需要虚拟地址呢我们要说到寻址方式寻址:根据指令内容确定操作数地址的过程,称为寻址在16位的cup或者8086cpu的时候,他寻址方式的模式为:实模式而在32位或者64位,寻址方式的模式为:保护模式实模式我们先来看一下实模式下程序的运行例:如图,在实模式中,A程序和B程序从磁盘直接加...

2020-02-06 18:08:59 7492 1

原创 Linux网络通讯(简单TCP/UDP服务器)

网络通讯TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,在 OSI模型中,它完成第四层传输层所指定的功能。UDP:UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconn...

2020-02-05 18:19:19 767

原创 数据结构(归并排序)

归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。时间复杂度:O(n log n)空间复杂度:O(n)稳定性:稳定排序过...

2020-02-03 17:54:12 487

原创 Linux网络通讯(TCP)

网络通讯TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,在 OSI模型中,它完成第四层传输层所指定的功能。在网络通讯时我们需要用到套接字,Socket(套接字)实质上提供了进程通信的端点.进程通信之前,双方首先必须各自的一个端点,否则是没有办法通信的。通过...

2020-01-30 14:49:19 760

原创 linux实现三个进程(A,B,C)顺次打印A,B,C

linux实现三个进程(A,B,C)顺次打印A,B,C这个题目关键在于如何使三个程序依次有序的打印出A,B,C。在这里,我通过信号灯实现信号灯的讲解:https://blog.csdn.net/wfea_lff/article/details/104093277之前已经讲过信号灯,这里就不多说了如何让三个没有亲缘关系的进程有序的打印:就好比三个人依次报数一样,只有第二个人听到第一个人报数...

2020-01-27 18:17:00 1825

原创 Linux通讯(信号灯)

信号灯信号灯(semaphore)它是不同进程间或一个给定进程内部不同线程间同步的机制System V的信号灯是一个或者多个信号灯的一个集合(允许对集合中的多个计数信号灯进行同时操作)。其中的每一个都是单独的计数信号灯。而Posix信号灯指的是单个计数信号灯。在linux中我们可以通过下面的指令来查看信号灯ipcs -s也可以通过下面的命令删除信号灯ipcrm -s 【semid】...

2020-01-27 17:22:21 1531

原创 Linux通讯(消息队列)

消息队列消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。在linux中我们可以通过下面的指令来查看消息队列ipcs -q也可以通过下面的命令删除消息队列ipcrm -q 【shmid】一、消息队列相关函数...

2020-01-26 17:14:29 206

原创 Linux通讯(共享内存)

共享内存1、共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。2、为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。3、由于多个进程共享一段内存,因此也需要依靠某种同步机制。在linux中我们可以通过下面的指令来查看共享内存ipcs...

2020-01-20 18:37:03 221

原创 Linux信号(信号通信)

信号通讯其实就是内核向用户发送信号,只有内核才能发送信号,用户是无法发出信号的linux中信号可以通过命令 kill -l 查看一共有64种信号1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SI...

2020-01-16 17:37:43 166

原创 数据结构(直接插入排序)

直接插入排序直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。直接插入排序流程例如:41 67 34 0 69 24 78 58 62 64定义临时变量tmp第一趟:在待排序的数字中选择第二个数字(67)将其存入tmp中,让tmp与第一个数字(4...

2020-01-16 12:37:55 1079 1

原创 Linux管道(有名管道)

Linux:是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计...

2020-01-15 18:17:09 709

原创 Linux管道(无名管道)

Linux:是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计...

2020-01-15 16:15:47 274

原创 数据结构(选择排序)

选择排序选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。选择排序流程第一趟:先在未排序的数字中随便找到一个数字,将其定为最小的值,并让当前最小的值与其他数字依次比较,如果其他数字大于当前最小值则当前最小值继续与下一个数字进行比较,如果当前最小值大于比较的数...

2020-01-14 19:16:50 136

原创 Linux基础指令(cp、mv、rm、vi/vim、输出重定向、cat)

Linux基础指令Linux :是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的...

2020-01-13 12:37:34 1161

原创 Linux基础指令(ls、pwd、cd、mkdir、touch)

Linux基础指令Linux :是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的...

2020-01-12 20:27:56 558

原创 数据结构(冒泡排序)

冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序流程第一趟:依次比较相邻的两个数,将小数放在前面,大数放在后面首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,...

2019-12-16 11:27:32 492

空空如也

空空如也

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

TA关注的人

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