自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 玩转vim之插件管理

在这里我所使用的vim插件管理是vim-plug,github地址1、vim-plug安装以ubuntu为例,按照GitHub上安装指引,输入如下安装命令即可:curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim可以打开文件: ~/.vim/autoload/plug.vim 该文件有给vim安装插件示例

2021-10-23 09:50:33 245

原创 gflags使用详解

简介gflags是什么?gflags是google开源的命令行标记处理库;那么什么是命令行标记呢?顾名思义就是当运行一个可执行文件时,由用户为其指定的标记,形如: fgrep -l -f ./test ccc jjj注意上述命令,-l与-f ./test是命令行标记,而ccc与jjj是命令行参数,因为这两者不是以破折号开头的。一般的一个可执行文件,允许用户为其传入命令行标记以及参数,如...

2020-02-22 17:15:13 2171 1

原创 C++实现单链表

概述该单链表的实现具有迭代器(一个嵌套类)以及,增、删、改、查、反转操作,所有关于指针的操作均隐藏在迭代器里。代码实现template <class Object>class LinkList {private: struct Node { Object data; struct Node * next; Node(const Object & d = ...

2019-12-18 23:26:47 175

原创 归并排序(C语言)

简介归并排序简言之就是合并两个有序表对于一个初始状态为无序的序列,我们先将其分割成左右子序列,然后对这两个左右子序列递归应用归并排序,最后依次合并各个有序子序列那么如何分割呢?简单,2等分即可那么如何合并这两个有序表呢?假设有两个有序数组A、B,输出数组C,以及指向这三个数组的索引i、j、k,这三个索引初始值均为数组首元素位置,然后将A、B中较小的那个元素移动到C,更新较小者数组和C数组...

2019-11-04 21:10:08 487

原创 快速排序(C语言)

简介快速排序与归并排序一样也是一种分治递归算法,其排序(升序)步骤可以简述如下:1、在待排元素集合N中任选一元素做为枢纽元2、开始分割元素,使左部元素均小于枢纽元,右部元素均大于枢纽元3、对左右子序列递归应用步骤1、21、选取枢纽元有一种极其常见的、错误的、非常糟糕的枢纽元的选取,是选取数组第一个或者最后一个元素为枢纽元,如果输入序列是随机的那么上述做法可以接受,但如果输入的序列与我们...

2019-11-02 22:45:57 361

原创 Qt之为QTabWidget重新实现鼠标双击事件

0、前言在Qt中如果想重新实现某一事件(比如鼠标双击事件)有两种方式:重载该类,重新实现该事件函数使用事件过滤器1、为QTabWidget重新实现鼠标双击事件废话不多说先上效果图,下图是我自己写的文本编辑器1.1 、第一种实现方式(重载)代码:// 首先我们继承QTabWidgetclass MyTabWidget : public QTabWidget{Q_OBJECT...

2019-10-20 21:54:03 2370 2

原创 libevent学习笔记五——socketpair

socket既可以用于网络通信也可以用于进程间通信,libevent为了将信号事件集成到其自身的事件管理系统中采用了socketpair的机制,socketpair简言之就是在本地创建了一对用于通信的socket,libevent采用如下接口创建socketpair。int evutil_socketpair(int family, int type, int protocol, evutil_...

2019-08-03 09:37:39 874

原创 libevent学习笔记七——集成信号事件到事件主循环

概述在linux系统中有现成的信号捕获接口如sigaction,它可以捕获指定的信号并执行用户自定义信号处理函数,那么如何将这种机制集成到libevent事件管理模型中呢?libevent采用了socketpair的方式将信号事件集成到了其自身的事件处理模型中。具体做法如下简述:初始化socketpair;调用接口sigaction设置指定信号的信号处理函数,该信号处理函数所做工作为向...

2019-07-27 18:31:51 315

原创 Libevent学习笔记二——事件管理

概述在libevent中,事件分为3类:IO、signal和超时事件,其中IO和signal事件采用链表来管理,超时事件采用小根堆来管理;具体实现在此以IO事件为例讲解libevent事件管理:libevent中结构体struct event_base base的成员变量struct event_io_map io用于管理IO事件。#define event_io_map event_s...

2019-07-24 21:50:17 382

原创 libevent学习笔记一——初始化

一、初始化libevent库base = event_base_new();该函数所做主要工作:1)、调用接口min_heap_ctor_(&base->timeheap)初始化小根堆,libevent使用小根堆来管理超时事件;2)、初始化活跃事件链表,libevent将满足条件的超时事件、IO/Signal事件插入活跃链表,稍后按优先级依次执行;TAILQ_INIT(&a...

2019-07-13 16:08:26 358

原创 libevent学习笔记六——集成定时器事件到事件主循环

Libevent版本2.1.8(超链接),参考源码time-test.c1、使用以下两个接口初始化event库,并且初始化一个eventstruct event_base * event_base_new(void);Int event_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short ev...

2019-07-10 22:25:39 367

原创 libevent学习笔记三——活跃事件管理

激活列表基本结构libevent激活列表使用双向链表数据结构实现,其按优先级存放活跃事件,具体结构如下图:libevent在结构体struct event_base中维护了优先级双向队列头struct evcallback_list *activequeues数组,其下标越小表示优先级越高。各数组成员指向了双向链表的头和尾如下图所示:激活列表基本操作该宏用于声明一个表示双向列表头的结构...

2019-05-29 20:35:52 362

原创 libevent学习笔记四——timer小根堆

二叉堆的基本结构libevent使用二叉堆来管理timer事件,其key值为超时时间,二叉堆是一颗被完全填满的二叉树,最底层可能有例外,且底层元素都是从左到右填入的。考虑到完全二叉树的规律性,其很容易使用数组来表示,libevent也是使用数组的方式来表示的,小根堆的结构体如下:typedef struct min_heap{ struct event** p; // 指向二叉堆根节点...

2019-04-27 19:12:48 780

原创 C++显式类型转换

C++具有多种显式类型转换,如下:构造,使用&quot;{}&quot;符号构造新对象可以防止窄化转换;static_cast执行关联类型的转换,比如基本算术类型(bool、char、int、unsigned、float等)之间的转换;还有一种指针类型向同一个类层次中其他指针类型的转换,比如基本指针向派生类指针的转换;reinterpret_cast执行非关联类型转换,比如整数向指针类型的转换或者不同指针类型...

2019-02-28 19:55:40 344

原创 Qt之QSignalMapper类信号映射器

简介设想有这样一种应用场景,我们用Qt写一个多标签页(QTabWidget)的文本编辑器,该文本编辑器有一个窗口菜单栏,当我们每点击该菜单栏的子菜单栏时就会将相应的标签页置为活跃状态,如下图所示:一般我们想到的做法是,利用connect关联点击事件到设置活跃窗口的槽函数上去,但是槽函数如何知道是谁发来的信号呢?其实,Qt为我们提供了信号映射器类QSignalMapper,该类可以识别出信号是...

2019-01-27 22:10:39 575

原创 C++lambda表达式

1、概念构造一个[闭包](https://en.wikipedia.org/wiki/Closure_%28computer_programming%29):一个匿名函数对象可以捕获作用于内的变量。

2019-01-26 15:37:04 1039

原创 Qt之QSettings类保存和读取应用程序配置信息

简介有时候我们会期望应用程序记住一些设置或配置信息,比如说窗口大小、位置或者上一次打开的文件等等。在windows操作系统中这些信息一般保存在系统注册表里,在macOS、IOS中则保存在一个属性列表文件里,而Unix系统没有统一的标准,大多数应用程序(包括KDE应用)都保存在INI文件中。Qt提供了一个独立于平台的可以保存和恢复应用程序设置的类QSettings。基本用法1、构造首先我们...

2018-12-30 15:26:09 2412

原创 C++标准库之线程

概念线程是执行任务的计算机特性的系统层面表示,是计算的概念在计算机硬件层面的抽象。单一地址空间所有线程可以访问相同的内存位置,但线程间不共享栈,因此局部变量不会产生数据竞争问题。**注意:**使用C++标准库线程API需要包含头文件 #include &amp;amp;amp;amp;lt; thread &amp;amp;amp;amp;gt;0身份每个执行线程都有一个唯一的标识,用std::thread::id表示,id是一个轻量级的可拷贝的类,其...

2018-12-16 16:58:44 1430

原创 插入排序&&希尔排序(C语言)

算法原理以升序为例:假设前N个元素已经按升序方式排好序了,那么先让第N+1个元素和第N个元素进行比较,如果该元素小于第N个元素,那么将第N个元素放入第N+1个位置,将第N+1个元素插入前N个位置中合适的位置。以下为代码实现:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#defin...

2018-10-14 16:31:39 208

原创 选择排序(C语言)

算法原理以升序为例:选取数组第0个位置为最小的元素的位置,将该位置元素依次和数组剩余元素做比较,将最小者放入位置0;重复步骤1,依次填充数组第1、第2个元素…直到最后一个元素为止。以下为代码实现:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#define ARRAYSIZE...

2018-10-14 15:43:32 309

原创 冒泡排序(C语言)

算法原理以升序为例:从数组起始位置逐次比较相邻的元素。如果前一个元素比后一个元素大,则交换这两个元素,从前往后逐次遍历,那么最后一个元素则是最大的数。重复步骤1、2除了已经移至最后的元素持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较...

2018-10-14 15:17:12 217

原创 printf函数

printf函数详解该文章printf函数原型来自CooCox CoIDE内部组件,为精简版,不能处理浮点数。首先printf函数将格式字符串以及可变参数列表va_list做为参数传递给vprintf函数。/** * @brief Outputs a formatted string on the DBGU stream, using a variable number o...

2018-03-03 10:10:07 288

空空如也

空空如也

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

TA关注的人

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