vim
一、vim的模式
模式
功能
命令模式
进行查看文件内容, 修改文件, 关键的搜索等操作。
编辑模式
对文件内容进行修改和内容添加
末行模式
执行Linux命令, 保存文件, 进行行的跳转, 窗口分屏等操作
具体关系如图
二、命令模式
12#以vim方式打开/创建 文件vim 文件名
1.保存退出1ZZ
2.代码格式化1gg=G
3.光标移动
快捷键
功能
备注
h
光标左移
<–
j
光标下移
↓
k
光标上移
↑
l
光标右移
–>
0
光标移动到行首
/
$
光标移动到行尾部
/
gg
光标移动到文件头
第一行的开始
G
光标移动到文件尾部
最后一行的开始
nG
行跳转
跳转到第n行
n+回车
相对跳转 n 行
向下跳转n行
4.删除命令
vim中其实没有删除操作,所谓的删除都是剪切
快捷键
功能
备注
x
删除光标后边的字符
光标盖住的字符
X
删除光标前边的字符
/
dw
删除单词
要先把光标移动到单词的第一个字母上再删除, ...
模板
一、非类型模板参数
以Array来举例
1234template<typename T, size_t num> //T就是类型参数,N就是非类型模板参数class Array{};Array<int,100> a;
非类型模板参数类型一般为 long long/long/int/char/short像string,double,float等都不能作为非类型模板参数,会报错
二、函数模板的特化
1.特化的简单使用12345678910111213141516171819202122232425262728293031323334353637383940414243template<class T>bool IsEqual(T& left, T& right){ return left == right;}template<> //模板函数的特化bool IsEqual<char*>(char*& left, c ...
压缩查找命令
一、压缩命令
1.tar
Linux系统中自带两个原始压缩工具 : gzip , bzip2但他们都有不能打包压缩文件和压缩后不会保留原有文件的问题同时Linux中有自带的打包工具 : tar , 将他们联合起来可以各司其职发挥作用
关于tar的参数作用:
123456c : 创建压缩文件x : 释放压缩文件内容z : 使用gzip方式进行文件压缩j : 使用bzip2方式进行文件压缩v : 压缩过程中显示压缩信息, 可省略f : 指定压缩包的名字
①压缩关于tar的压缩语法:
12345tar 参数 生成的压缩包的名字 要压缩的文件(文件或者目录) (要压缩的文件)压缩包的名字后缀最好使用标准后缀gzip方式压缩 后缀为 : .tar.gz (.tgz)bzip2 压缩 后缀为 : .tar.bz2
eg : 使用gzip进行压缩:
eg : 使用bzip2进行压缩
② 解压缩解压的语法:
12345#1. 解压到当前目录tar 参数 压缩包名#2. 解压到指定目录tar 参数 压缩包名 -C 解压目录
eg : 使用gzip方式进行解压
eg : 使用bzip ...
tips
一、Linux目录结构
Linux中 根目录和子目录结构是相对固定的,不同的目录功能也是固定的
目录名称
功能
bin
二进制文件目录, 存储了可执行程序, 命令对应的可执行程序都在这个目录中
sbin
super binary, root用户使用的一些二进制可执行程序
etc
配置文件目录, 系统的或者用户自己安装的应用程序的配置文件都存储在这个目录中
lib
library, 存储了一些动态库和静态库,给系统或者安装的软件使用
media
挂载目录, 挂载外部设备,比如: 光驱, 扫描仪
mnt
临时挂载目录, 比如我们可以将U盘临时挂载到这个目录下
proc
内存使用的一个映射目录, 给操作系统使用的
tmp
临时目录, 存放临时数据, 重启电脑数据就被自动删除了
boot
存储了开机相关的设置
home
存储了普通用户的家目录,家目录名和用户名相同
root
root用户的家目录
dev
device , 设备目录, Linux中一切皆文件, 所有的硬件会抽象成文件存储起来,比如:键盘, 鼠标
lost+fou ...
智能指针
1. 智能指针介绍1.1 为什么使用智能指针
根据所需构建一个智能指针
RAII (Resource Acquisition Is Initialization) 是一种利用对象生命周期来控制程序资源智能指针就是依靠RAII实现的
1234567891011121314151617181920212223242526272829303132template<typename T>class Smart_Ptr{public: Smart_Ptr(T* ptr) :_ptr(ptr) {} ~Smart_Ptr() { if (_ptr) { cout << "deleted" << endl; delete _ptr; _ptr = nullptr; } } T& operator*() { return *_ptr; } T* operator->() { return _ptr; ...
C++11
1. 自动类型推导1.1 auto
C++11之前auto和static是对应的,表示变量是自动存储的,但是非static的局部变量默认都是自动存储的,因此这个关键字变得非常鸡肋,在C++11中他们赋予了新的含义,使用这个关键字能够像别的语言一样自动推导出变量的实际类型。
1.1.1 推导规则
使用auto声明的变量必须要进行初始化,以让编译器推导出它的实际类型,在编译时将auto占位符替换为真正的类型。
当变量不是指针或者引用类型时,推导的结果中不会保留const、volatile关键字
当变量是指针或者引用类型时,推导的结果中会保留const、volatile关键字
1.1.2 auto的限制
不能作为函数参数使用。因为只有在函数调用的时候才会给函数参数传递实参,auto要求必须要给修饰的变量赋值,因此二者矛盾。
1234int func(auto a, auto b) // error{ cout << "a: " << a <<", b: " << b < ...
C++11
一、decltype(RTTI)
RTTI 即 run time type identification(程序运行对对象的类型识别)auto和decltype
123456789101112131415161718//类型推导RTTI : run time type identification//程序运行起来对对象的类型识别int a{ 10 }, b{ 20 };decltype(a + b) c = 30; //定一个c和a+b是一个类型的对象cout << typeid(c).name() << endl;cout << c << endl;auto d = a+b;cout << typeid(d).name() << endl;cout << d << endl;//auto不能作为形参和返回值/*auto func(auto e){ return e;}cout << func(a) << ...
位图,布隆过滤器
一、位图
位图就是利用好每一个比特位进行利用适用于海量数据,数据无重复的场景,通常用来判断数据是否存在
位图的作用有
排序,去重,集合的交并集
模拟实现
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#pragma once#include<vector>#include<iostream>using namespace std;namespace 9TSe{ class bitset { public: bitset(size_t N) { _bits.resize(N/32+1,0); //开空间和初始化 _num = 0; } void set(size_t x) //增 { size_t index = x / 32; //算出映射的位置在第几个整形 size_t po ...
哈希
一、哈希的基本介绍
性能上
查找数据,哈希时间复杂度为O(1)大量随机数据插入,map和set性能快大量随机数据删除,map和set性能快
哈希映射方法
1.直接定址法:每个值都有自己唯一的位置优点:无哈希冲突,简单且均匀缺点:如果空间分散会有很大的空间浪费适应于范围小且连续的情况
2,除留余数法优点:空间合适且不浪费过多的空间缺点:可能存在有相同的映射地址(哈希冲突)
哈希大部分都围绕着解决哈希冲突
1.闭散列:冲突后占用下一个空位置缺点:查找效率变低,互相冲突导致插入逻辑复杂线性探测:线性找下一个空位置,++二次探测:平方步调找下一个位置,^2
2.开散列(哈希桶)(拉链法):冲突的位置下加上链表(哈希桶),由此STL中并没有双向迭代器缺点:链表太长有效率问题优点:冲突不会相互影响
二、闭散列的哈希表实现
实际中开散列应用情况优于闭散列,点一下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585 ...
map,set
一、set
1.set简介和基本用法
set底层的实现就是红黑树
相较于算法中的 find O(N)set用AVL树实现的find可以达到 O(logN)用红黑树实现的find可以达到O(2logN)
将数据放入set中后会自动去重排序
2.multiset
相较于set少了去重的部分,可以让数据重复
find,erase等成员删除的都是中序遍历中第一个成员
二、map
1.pair(键值对)12345678910111213141516171819template<class T1, class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair() :first(T1()) //传入类型默认值构造 ,second(T2()) {} pair(const T1& a,const T2& b) :first(a) ,second(b) {}};
2.插入 ...