yhy's blog
在命令后加 & 符号 可将标准输出重定向到 2> /dev/null然后 2>&1这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。不同顺序结果也不同,如下命令 标准输出 错误输出>/dev/null 2>&1 丢弃 丢弃2>&1 >/dev/null 丢弃 屏幕
判断字符类别常用函数命名无下划线头文件#include <cctype>其他isdigit() // 判断是否为十进制数字 isalpha() // 判断是否为字母 isalnum() // 判断是否为字母或者数字 islower() // 判断是否为小写字符 isupper() // 判断是否为大写字母 tolower() // 如果参数是大写字符,返回其小写 toupper() // 如果参数是小写字符,返回其大写 isxdigit() // 如果参数是十六进制数字,0~9、a~f、A~F,返回true iscntrl() // 判断是否为控制字符 isgraph() // 判断是否为除空格外的打印字符 isprint() // 判断是否为打印字符 ispunct() // 判断是否为标点符号 isspace() // 判断是否为空格
头文件#include < fstream>ofstream:该数据类型表示输出文件流,用于创建文件并向文件写入信息。ifstream:该数据类型表示输入文件流,用于从文件读取信息。fstream:该数据类型表示输入和输出文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。打开文件ofstream outFile; outFile.open("demo.txt");// 默认方式打开文件 ofstream outFile("demo.txt"); //或者使用构造函数 文件的打开方式模式标志 描述ios::in 读方式打开文件ios::out 写方式打开文件ios::trunc 如果此文件已经存在, 就会打开文件之前把文件长度截断为0ios::app 尾部最加方式(在尾部写入)ios::ate 文件打开后, 定位到文件尾ios::binary 二进制方式(默认是文本方式)用法fstream stream; s
1.最常见的using namespace std;这种方式会导入整个std命名空间,优点是方便快捷,缺点是可能导致命名冲突2.别名声明(Type Alias)using MyInt = int; MyInt myNumber = 42;这里,MyInt是int的别名,可以用来声明变量,相当于typedef int MyInt , 它相比于typedef 更加直观2.引入特定成员(Using Declaration)using MyNamespace::foo;例如using std::cout;这样就可以在不导入整个std命名空间的情况下使用cout
1.使用 \ 续行使用反斜杠\作为续行符(line continuation character)可以将一行代码分成多行书写,提高代码的可读性。反斜杠\用于表示续行,让一个较长的字符串字面值跨越多行书写。反斜杠\后面的换行符会被忽略,因此在编译时这些字符串字面值会被连接成一个单独的字符串。 string s = " This string will\n\ //最后的\代表续行 printed as the pyramid\n\ as one single string literal form\n"; 2.字符串连接相邻的字符串字面值会在编译时连接在一起。这个过程被称为字符串字面值的拼接(concatenation)。在你提供的代码中,三个字符串字面值被放在相邻的位置,因此它们会在编译时连接成一个单独的字符串。string s1 = "This string will be printed as the\n" //在编译阶段会将这几个字符串连接 &
联合体所有成员共享同一块内存,可以用来判断系统是大端还是小端序#include <iostream> using namespace std; union test{ unsigned short a; //两个字节 char b[2]; }; int main(){ test t; t.a = 0x1234; printf("%x", t.b[0]); //低地址 输出 低位的 34 printf("%x", t.b[1]); //高地址 输出 高位的 12 }从输出可以看出,我的环境是小端序
什么是转义字符它用来表示控制符(如回车、换行等)与不可见字符,作用是改变其后的字符或ASCII码值的原有意义,转义为另外的含义序号 | 转义字符 | 转义功能 | ASCII码值1 | \0| 空字符 | 02| \a| 响铃| 7| 3| \b| 退格(Backspace)| 84| \t| 水平制表符(即横向跳格)| 95| \n| 回车换行(Enter)| 106| \v| 竖向跳格| 117| \f| 换页| 128| \r 回车| 139| \" 双引号(")| 3410| \’ 单引号(‘’)| 3911| ? 问号(?)| 6312| \ 反斜线字符(\)| 9213| \ddd| 1~3位八进制所代表的字符 | 14| \xhh|
1.首先安装插件管理器创建目录$ mkdir ~/.vim $ cd ~/.vim $ mkdir plugged plugin syntax colors doc autoload Vim-plug的安装curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim2.插件的添加和删除在~/.vimrc 文件中添加以下内容call plug#begin('~/.vim/plugged') Plug 'itchyny/lightline.vim' " 这里可以添加多个插件 call plug#end() 然后在vim中执行:PlugInstall 安装插件
当p和q分别为当前root节点的左右子节点时,root就是p和q的最近公共祖先 //若左右子树中分别存在p和q则返回root //若左右子树中都存在p和q则返回NULL //否则返回左右子树中不为空的结果 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root == nullptr || root == p || root == q) return root; //遇到 p或q 中的一个就返回 TreeNode* left = lowestCommonAncestor(root->left, p, q); //若返回值不为空说明左子树存在p / q TreeNode* right = lowestCommonAncestor(root->right, p, q); //若返回值不为空说明右子树存在p / q if(!left && !right) re
bfs方法:层次遍历取每层最后一个dfs方法:根右左遍历加一个depth参数,取每层第一个出现的
lelele