C++初始化
1. 列表初始化 初始化列表用{}表示,正常是没有类型的,但是在函数的参数列表中可以用std::initializer_list表示能够接收初始化列表。 std::initializer_list在一下情况会自动构造对象: 用于列表初始化对象,并且构造函数需要能够接受std::initializer_list参数 用于赋值或者函数调用,并且赋值运算符/函数需要能够接受std::initializer_list参数 绑定到auto或者包括在范围 for 循环中 auto p = { 1,2,3 };//能够推导出类型为std::initializer_lis auto p2 { 1,2,3 };//无法推导
C++代码书写规范
变量命名使用下划线命名法,函数命名使用大驼峰命名法,类和结构体使用大驼峰命名法,文件名使用下划线命名法 全局变量和常量使用k+大驼峰命名法,类成员变量可以以下划线作为结尾,结构体成员变量不加下划线 命名空间用下划线命名法 尽量不要使用全局变量,可以将其封装进对象里 ros中回调函数的形参可以使用const name & 修饰 函数声明中const修饰符无意义,只需在函数定义中使用 模板类的静态成员变量是每个特定实例化类型共享一份,而不是所有实例化类共享同一份。例如MyClass<int>和MyClass<double>的静态成员变量是独立的。
C++引用
1. 左值与右值 1.1 左值 左值是可以取地址的对象,比如变量名和解引用的指针变量。 // 以下的a、p、*p、b都是左值 int a = 3; int* p = &a; *p; const int b = 2; 1.2 右值 右值是不能取地址的对象,比如常量、临时变量、函数返回值、运算符返回值等。 double x = 1.3, y = 3.8; // 以下几个都是常见的右值 10; // 字面常量 x + y; // 表达式返回值 fmin(x, y); // 传值返回函数的返回值 2. 左值引用与右值引用 无论左值引用还是右值引用,都是给对象取别名。 2.1 左值引用 是指对左值的引用,作用是避免对象拷贝。 int& ra = a; 2.2 右值引用 是指对右值的引用,作用是延长对象的生命周期。 int&& rr = 10; 2.3 对比与总结 左值引用可以指向左值,在指向右值时需要const修饰 右值引用可以指向右值,在指向左值时需要std::move() cons...
CLion上使用ROS
1. 启动CLion 在ROS的根目录下(执行catkin_make的目录)执行如下(如果已将该路径添加到.bashrc文件则可跳过) source ./devel/setup.bash 寻找CLion位置 # 使用locate sudo updatedb locate clion.sh # 使用find sudo find / -name "clion.sh" 打开CLion(sh后面的路径因人而异) sh /home/robot/.local/share/JetBrains/Toolbox/apps/clion-nova/bin/clion.sh 2. CLion 中打开一个 ROS 项目 一定要选择工作区的src目录以从中导入项目 设置build路径 默认情况下,CLion将生成输出放在自动创建的cmake-build-debug或cmake-build-release目录中。对于ROS开发,这意味着将在CLion和运行catkin_make的控制台中使用两种不同的构建。因此需要将CLion构建路径设置为catkin工作区目录 将CMake options(CMake 选...
Docker命令
查看本地镜像 docker images 查看运行容器 docker ps 根据镜像创建容器 docker run --name my_container -dit --network=host my_image:tag /bin/bash --name:加上此参数可指定生成容器的名称,此参数位置在镜像id前 my_container 指定的容器名字 -d:打开后台运行 -i:打开控制台交互(不设置此选项退出容器后docker会自动清理未活动的容器) -t:支持终端登录 --network=host: 指定网络模式为主机网络 my_image:tag 是要使用的镜像名称和标签。不喜欢打这么多字的可以用id代替 /bin/bash 表示要在容器内启动 Bash Shell进行交互 进入容器正在执行的终端 docker attach 容器id # 如果使用exit退出,容器会停止运行 # 想退出容器但不想容器停止,则按住Ctrl+P+Q退出 进入容器并开启一个新的终端 docker exec -it 容器id /bin/bash # 如果使用exit退出,容器也不会停止 Dock...
STL容器
1. Array 1.1 初始化 std::array无构造函数,只含有非静态公共成员变量,所以属于聚合类型,其他聚合类型还有数组类型。 对聚合体使用列表初始化被称为聚合初始化,它也是列表初始化的一种形式,聚合体初始化需要层层嵌套。 std::array的定义大概如下: template<typename T, std::size_t N> class array { public: T _data[N]; }; 它的聚合初始化如下: /** * 第一层是为了初始化std::array本身 * 第二层是为了初始化里面的数组 */ std::array<int, 3> arr{{1,2,3}}; 由于 C++ 聚合初始化时允许省略所有的内部花括号,所以可以简写做: std::array<int, 3> arr{1,2,3}; 对于二维数组。标准形式的初始化如下: /** * 最外两层是为了初始化外层array * 内部两层是为了初始化内层array */ std::array<...
Tmux
1. 安装 git clone git@github.com:tmux/tmux.git cd tmux sh autogen.sh ./configure && make 2. 配置 再配合zsh使用时会出现提示代码为白色的现象,需要修改~/目录下的.tmux.conf set -g default-terminal "tmux-256color" 为了让tmux支持鼠标操作,需要继续加入内容 set-option -g mouse on 3. 使用 tmux的使用可参考博客
为Hexo增加随机图API支持
将根目录下创建scripts/filters/random_cover.js文件,内容为 hexo.extend.generator.register('post', locals => { const previousIndexes = [] const getRandomCover = defaultCover => { if (!defaultCover) return false if (!Array.isArray(defaultCover)) return defaultCover const coverCount = defaultCover.length if (coverCount === 1) { return defaultCover[0] } const maxPreviousIndexes = coverCount === 2 ? 1 : (coverCount === 3 ? 2 : 3) let index do ...
将Hexo部署到远程服务器
1. 服务器部署 1.1 Git用户设置 首先在远程服务器中创建Git用户 adduser git 增加sudo权限 sudo vim /etc/sudoers 在文件中找到如下命令 ## Allow root to run any commands anywhere root ALL=(ALL) ALL 添加以下内容 git ALL=(ALL) ALL 然后按Esc键,然后按w!回车和q!回车,强制写入 在git用户下创建.ssh并将公钥复制到authorized_keys文件中 1.2 创建仓库目录 在var目录下创建repo作为Git仓库目录 sudo mkdir /var/repo 赋予权限 sudo chown -R git:git /var/repo sudo chmod -R 755 /var/repo 接下来创建Hexo目录作为网站根目录,并赋予权限 sudo mkdir /var/hexo sudo chown -R git:git /var/hexo sudo chmod -R 755 /var/hexo 接下来创建一个空白的Gi...
创建随机图片API
1. 创建站点 在宝塔面板的网站中添加站点作为API地址,将网站开启PHP,并申请一个SSL认证并打开强制https 2. 创建图片链接 打开这个站点的目录,创建一个img.txt和一个index.php 在PicList的管理中中全部选中并复制图片url,将链接粘贴到img.txt中 在index.php写入如下内容 <?php //存有image链接的文件名img.txt $filename = "img.txt"; if(!file_exists($filename)){ die('文件不存在'); } //从文本获取链接 $pics = []; $fs = fopen($filename, "r"); while(!feof($fs)){ $line=trim(fgets($fs)); if($line!=''){ array_push($pics, $line); } } //从数组随机获取链接 $pic = $pics[array_rand($pi...