ctags使用
安装
在linux系统中安装只需要一行指令
1sudo apt install ctags
指令
终端中指令
创建索引文件
ctags 其它的指令使用的前提都是为操作的文件建立索引文件的基础上进行的,所以在使用 ctags 对文件进行检索之前,先执行命令如下指令来创建索引文件
1ctags -R .
可以在该指令之后添加参数,参数具体说明看下述 ctags参数,例如
1ctags -R --c++-kinds=+p --fields=+iaS --extra=+q /usr/include
生成的tags文件所描述的符号信息都只针对当前项目源代码树中的文件,而不包含任何外部文件的符号信息,例如标准头文件(例如 <stdio.h><stdlib.h> )等,因此 vim 无法在外部头文件中找到符号
利用 ctags 查找变量或者函数名
1vi –t variable_name/function_name
ctags参数
--list-maps ctags可以根据文件的扩展名以及文件名的形式确定该文件是何种语言。用–list-maps查看默认情况下支持那些语言,每 ...
opencv-cpp
对像素点进行处理,保证rgb数值不超过范围
12345678int stemp(int a){ if (a > 255) a = 255; if (a < 0) a = 0; return a;}
读入图像和想要实现的操作,实现相应的操作,例如灰度图,HSV图,LAC图等
12345678910111213141516171819202122232425262728293031void operate(cv::Mat image, const std::string operate, int light = 0, float contrast = 1){ cv::Mat dst; if (operate == "LAC") { int i, j; multiply(image, cv::Scalar(contrast, contrast, contrast), dst); dst = dst + c ...
C语言基础
编译器
文本编辑器
用于对 C 语言代码进行编写,一般来说使用的是 vscode 或者是 vs , devc++ 之类的,还有在终端上可以直接使用的 vim 之类的编辑器。编辑器的类型无关紧要,主要是用于编写 C 语言代码
编译器
各种编程语言写完之后都不可能直接运行,而是需要编译器来把代码编译成电脑能识别的语言——机器语言,是二进制语言,只有 0 和 1 组成。所以编译的过程相当于是翻译,把 C 代码给翻译成机器代码了。
最常用的就是 GNU 的 C/C++编译器,mingw 中实际上就是 GNU 的编译器
在 GNU 中的编译指令为
12gcc a.c -o b.exe // windows为.exe后缀gcc a.c -o b.out // linux为.out后缀
C语言程序结构
C程序主要包括下列指令
预处理指令
就是文件上部以 # 开头的指令,例如
1#include <stdio.h>
预处理指令会在预编译的时候就把对应文件中的代码复制过来,预编译指令为
1gcc -E a.c -o b.i
之后打开 b.i 文件将会看到文件中不仅有 a.c 中的内容,也有 ...
ButterFly解决公式显示问题
公式渲染
首先需要换一个渲染器,要先把安装的渲染器卸载,然后安装 hexo-renderer-markdown-it-katex ,在根目录打开终端输入指令
12npm un hexo-renderer-marked --savenpm i hexo-renderer-markdown-it-katex --save
然后在站点配置文件添加下列内容
1234567891011markdown: render: html: true xhtmlOut: false breaks: true linkify: true typographer: true plugins: anchors: level: 1 collisionSuffix: ''
如果在之前配置过 MathJax 的话,在主题配置文件中找到,并修改为如下
12345678910# MathJaxmathjax: enable: false per_page: false# KaTeXkatex: enable: true per_page: fal ...
Hexo加载动画
前言
hexo 默认是没有加载动画的,偶然在做博客时看到了这个教程,在此基础上做了一些小改动,效果很不错,所以记录下来
原文链接: Hexo站点加载动画修改
加载动画设置
创建js文件
在 themes\butterfly\layout\includes\loading 文件夹下创建一个名为 loading.ejs 的文件,并且写入
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950<% if (theme.preloader.enable) { %><div id='loader'> <% if(theme.preloader.layout == 'gear' ) {%> <div class="outer_box"> <div class='loader_overlay'>&l ...
Hexo动态效果
雪花动态效果
在做 ButterFly 美化过程中,看到了这个博客,漫天飘落的雪花效果很不错,所以记录一下
原文: Hexo添加雪花动态效果背景
添加雪花动态效果
首先在 \themes\butterfly\source\js 目录下新建一个文件 snowflake.js ,然后将下列内容写入文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|Brows ...
Hexo标题旋转风车
前言
这个特效是看到了别人的博客之后学到的,很不错,可以看看原文 Hexo小标题旋转风车设置
为了以后自己换电脑的话方便找,所以做一些记录
设置旋转风车
打开主题配置文件,查找 beautify 并且修改为如下代码
123beautify: enable: true title-prefix-icon: '\f863'
并且在 inject 的 head 处引入文件
123inject: head: - "<style>#article-container.post-content h1:before, h2:before, h3:before, h4:before, h5:before, h6:before { -webkit-animation: avatar_turn_around 1s linear infinite; -moz-animation: avatar_turn_around 1s linear infinite; -o-animation: avatar_turn_around 1s linear i ...
Hexo博客添加自定义css和js文件
创建文件
进入到主题目录资源文件夹下,也就是 themes\butterfly\source 文件夹下,然后就会看到三个文件夹 css , img , js , css 和 js 文件就可以建在这里
当然这样的话会导致主题更新的时候会把你的文件更新掉,所以可以在根目录下创建 css 和 js 文件夹,并且把对应的文件放在这里面
在引用文件时要注意,一般来说是在主题配置文件里的 inject 引入。 css 一般在 head 引入,而 js 文件一般在 bottom 中引入,当然某些特殊情况除外
使用文件
123456789101112inject: head: # 自定义css - <link rel="stylesheet" href="/css/style.css?1"> # 静态文件后面加个 ?任意内容 可以在每次更新之后用户自动重新请求. # 例如添加 ?1 ,在修改此文件后改成 ?2 ,用户访问你的网站时,不会使用本地的缓存,而是请求新的内容。没修改的话就不用动。 bottom: # 自定 ...
ButterFly导航栏居中
前言
之前样式的导航栏实际上倒也还好,只是在查找 ButterFly 美化时恰巧看到了这个,所以就做一下并且记录下来,原文请参考 butterfly博客导航栏居中
搜索按钮修改
按照如下代码修改文件 themes\butterfly\layout\includes\header\nav.pug
1234567891011121314151617181920nav#nav span#blog-info a(href=url_for('/') title=config.title) if theme.nav.logo img.site-icon(src=url_for(theme.nav.logo)) if theme.nav.display_title span.site-name=config.title #menus !=partial('includes/header/menu_item', {}, {cache: true}) ...
ButterFly主题美化
我这里只总结了自己用到的,可以看原教程:hexo主题butterfly配置
主题安装
在项目的根目录 Blog 右键打开终端,输入如下指令安装
1git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
安装 pug 和 stylus 渲染器
1npm install hexo-renderer-pug hexo-renderer-stylus --save
修改占点配置文件,开启主题
1theme: butterfly
为了減少升级主题带来的不便,可以把主题文件夹中的 _config.yml 重命名为 _config.butterfly.yml,复制到根目录下与站点配置文件同级。
Hexo 会自动合并主题中的 _config.yml 和 _config.butterfly.yml ,如果存在同名配置,会使用 _config.butterfly.yml 的配置,其优先度较高。所以像和博客网址相关联的固定资料可以设置在 _config.yml 中,比如博客的标题、作 ...
NexT主题美化
主题安装
当前用得最多的是next主题,下载地址:theme-next/hexo-theme-next
可以直接在博客根目录中打开终端,输入代码将主题下载到目录 Blog/themes 中
1git clone https://github.com/theme-next/hexo-theme-next themes/next
主题配置
打开根目录下的 _config.yml 文件(站点配置文件),查找并且修改
123456789101112title: LuosBlogsubtitle: ''description: 或许从未开始,或许已经结束,但是我该走了keywords:author: 落language: zh-CNtimezone: Asia/Shanghai# Extensions## Plugins: https://hexo.io/plugins/## Themes: https://hexo.io/themes/theme: next
将主题修改为 next ,主题的语言需要查看 themes/next/language 文件夹中的简体中文是 zh- ...
个人博客创建
绑定github
SSH与github
SSH(安全外壳协议,Secure Shell 的缩写)是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单来说,SSH就是保障你的账户安全,将你的数据加密压缩,不仅防止其他人截获你的数据,还能加快传输速度。
一般来说,安装 git bash 之后实际上是自带 SSH 的,所以可以检验一下,在终端输入指令 ssh 会显示出 usage 的内容,那就是装好了,有问题的话,可以自行百度一下。
没问题了就可以输入指令 ssh-keygen -t rsa ,使用 RSA 算法生成密钥,然后,如下
其中 红色圈里面是输入保存的地址,蓝色圈里输入的是 passphrase,可以不输入,直接回车就行。最终去你保存的地址找到它
接下来我们要做的事情就是把公钥 id.pub 的内容添加到 GitHub。复制公钥 id.pub 文件里的内容,你可以通过目录找到 id.pub 文件的位置,打开复制里面的内容。(文件名是与上述操作中文件名称有关,我的设置 ...
算法
单调栈
用于寻找一个数组内最大或者最小的元素,单调的意思就是栈内的数据排列是单调递增或者递减的
例如,如果是一个单调递增的栈,遇到比top元素更小的元素的话,就需要把top之前比该元素小的元素全部弹出,之后再将该元素放入,继续维持单调栈
1234567891011121314151617181920212223// leetcode 42int trap(vector<int>& height){ stack<int> stack; int n = height.size(); int res = 0; for (int i = 0; i < n; i++) { // 将栈顶中小的元素推出栈,并且计算这个范围内的数据 while (!stack.empty() && stack.top() < height[i]) { int top = stack.top(); stack.pop(); if (!stack.empty()) // 如果已经空了就中断不再进行 ...
数据结构
github仓库
链表
单向链表
单向链表每次查找只能从前向后查找,单向的,只会有一个指针并且指向下一个节点。所以每个节点只能找到自己后面的节点,但是无法找到之前的链表。
对于循环链表,最末端的节点会指向头节点,形成首尾相接的循环。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631 ...
C++内存管理
四种内存分配和释放的方式
分配
释放
类型
是否可重载
malloc
free
C-function
否
new
delete
C+±expressions
否
::operator new()
::operator delete()
C+±function
可
allocator::allocate()
allocator::deallocate()
C+±STL
可自由设计并且搭配任何容器
memory primitives
malloc
free
不可重载
new
delete
不可重载
::operator new()
::operator delete()
可重载
allocator::allocate()
allocator::deallocate()
可以自由设计并搭配任何容器
new expression
new 有两个作用,申请内存→构造函数,申请内存使用 operator new 实际上使用的还是 malloc 函数来申请内存
12345678910111213141516Complex *pc = new ...
C++程序的生前死后
startup
默认的startup函数是由 linker(连接器) 自己选择的
1. 内存初始化
内存块:
从哪里来
大小多少
回收到哪
SBH(Small Block Heap):应付CRT本身以及main进去之后的所有内存(size=1024=1k)。
如果客户要的区块大小要小于sbh_threshold(size=1016,加上图中的上下的00000131(各占4个字节),1016+8=1024,即1K),将从sbh内部去申请内存。反之,使用HeapAlloc(win提供的API函数),让操作系统提供服务。
因此,内存小于等于1K的,VC6认为它足够小,它将使用SBH去服务它。反之,若大于1K,将有操作系统那些"池塘"(HeapAlloc等函数)来提供。(内存块从哪里来)
HeapAlloc:HeapAlloc是Windows提供的API,在进程初始化的时候,系统会在进程的地址空间中创建1M大小的堆,称为默认堆(Default Heap),该大小为默认值,可以通过/HEAP连接器开关进行修改。用户也可以通过HeapCreate创建额外的堆,堆的使用可以 ...
C++11STL
STL 六大部件
容器 Container
分配器 Allocators 用于为算法分配地址
算法 Algorithms
迭代器 Iterators 容器中就会有迭代器,用于遍历元素,就是可以表示容器中的所有种类的元素
适配器 Adapters 就像是一个泛化的指针, 对迭代器,仿函数,容器进行适配
仿函式 Functors 就是一种函数
数据在容器里,操作数据的函数在另外的类里
时间复杂度(Big-oh)
O(1),O(c)O(1),O(c)O(1),O(c) : 常数时间
O(n)O(n)O(n) :线性时间
O(lognx)O(\log_n x)O(lognx) :次线性时间
O(n2)O(n^2)O(n2) :平方时间
O(n3)O(n^3)O(n3) :立方时间
O(2n)O(2^n)O(2n) :指数时间
O(nlog2n)O(n\log_2n)O(nlog2n) :线性与二次方成长之间的模式
容器
Sequence Container(序列式)
Arrary (数组) 固定大小 12
Vector (向量) 末尾扩充 12
heap 以算法形式呈 ...
C++11新标准
variadic template
就是参数个数随意的模板,定义任意个参数的模板,可以是任意类型
而且可以依据参数重载,关键字 typename… 也可以实现递归,下面的这两种给方式可以并存
相较来看,第一个定义比较特化,第二个比较泛化,所以就会,如果传入参数是 1 + x 那么就调用第一个,否则调用第二个
12345template <typename... types>void func(size_t seed, types& ...args){return func(args...);}template <typename... types>void func(types& ...args){}
Space in Template Expressionn**ullptr & std::nullptr_t
左边是一个 object,就是0的空的指针,允许使用 null 代替0
auto
auto 表示不知道是什么类型的变量,可以把任意变量赋予 auto 变量
编译过程中,编译器会自动识别类型, ...











