这里写目录标题
一. 宏定义#define的知识点
https://www.cnblogs.com/wanqieddy/p/4377937.html
二. vscode配置
参考内容是:https://www.cnblogs.com/bpf-1024/p/11597000.html.
- 下载MinGW
下载地址:https://sourceforge.net/projects/mingw-w64/files/
下载的文件:进入网站后不要点击 “Download Lasted Version”,往下滑,找到最新版的 “x86_64-posix-seh”。
三. C++
- 类对象的创建方法:
#include <iostream>
using namespace std;
class A
{
private:
int n;
public:
A(int m):n(m){}
~A(){}
};
int main()
{
A a(1); //栈中分配
A b = A(1); //栈中分配
A* c = new A(1); //堆中分配
delete c;
return 0;
}
2.智能指针的用法
https://www.cnblogs.com/jiayayao/archive/2016/12/03/6128877.html
std::shared_ptr p1(new Person(1));// Person(1)的引用计数为1
3. stati局部变量
static局部变量只被初始化一次,下一次依据上一次结果值;
#include <iostream>
using namespace std;
void testLocalStaticObjects(int times)
{
static int localStaticObj = 0;
localStaticObj++;
cout << "times:" <<times <<"/tlocalStaticObj:" << localStaticObj << endl;
}
int main()
{
for (int i = 0; i < 5; ++i){
testLocalStaticObjects(i);
}
return 0;
}
4 void类型的指针
https://www.runoob.com/w3cnote/c-void-intro.html
void 指针可以指向任意类型的数据,就是说可以用任意类型的指针对 void 指针对 void 指针赋值。例如:
int *a;
void *p;
p=a;
如果要将 void 指针 p 赋给其他类型的指针,则需要强制类型转换,就本例而言:a=(int *)p。在内存的分配中我们可以见到 void 指针使用:内存分配函数 malloc 函数返回的指针就是 void * 型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据 (int )malloc(1024) 表示强制规定 malloc 返回的 void 指针指向的内存中存放的是一个个的 int 型数据。
5. map
如果map不存在某个key-value对,我们强行访问这个key的话,那么就会生成一个value的默认值,把这个key-value对插进去。
#include <iostream>
using namespace std;
#include "unordered_map"
class Clock{
private:
int hour,minute,second;
public:
Clock(int h=5,int m=5,int s=5){hour=h;minute=m;second=s;}
void setClock(int h,int m,int s){
hour = h;
minute = m;
second = s;
}
void showClock(){
cout<<hour<<minute<<second<<endl;
}
};
int main() {
unordered_map<int,Clock> map;
Clock c1;
c1.setClock(1,2,3);
map[1] = c1;
map[1].showClock();
map[2].showClock();
unordered_map<int,Clock>::iterator iter;
for(iter=map.begin();iter!=map.end();iter++){
iter->second.showClock();
}
return 0;
}
输出是:
123
555
555
123
- memcpy的知识
https://blog.csdn.net/qq_26525215/article/details/49757949
7 explicit的用法
https://blog.csdn.net/qq_24127015/article/details/104412800
https://blog.csdn.net/readyone/article/details/112371671
https://blog.csdn.net/fengbingchun/article/details/51168728?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-3.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-3.pc_relevant_antiscanv2&utm_relevant_index=5
四. Linux命令
1. 命令的语法
参考网址:https://www.cnblogs.com/haoyufang/p/11762583.html
1. 命令的一般格式
command [option]... [argument]...
command [options] [arguments]
具体说明:
(1)ommand: 表示命令的名称,如 ls
(2)option:定义命令的执行特性,可以有长短两种选项:
长选项:用 – 引导,后面跟完整的单词,如 --help
短选项:用 - 引导,后面跟单个的字符, 如 -a
(1) 多个短选项可以组合使用,例如: -h -l -a == -hla,但是长选项不能组合使用,如 --help后面就不能再跟另外一个单词了。
(2) option 也可以有自己的参数,注意:选项与选项之间,选项与参数之间,参数与参数之间必须有空格!
(3) argument:描述命令作用的对象,如/etc 就是ls 命令作用的对象。
2. 命令格式中的符号含义
在linux中,命令的选项和参数所使用的符号也有相应的含义:
尖括号< >:必选参数,实际使用时应将其替换为所需要的参数
大括号{ }:必选参数,内部使用,包含此处允许使用的参数
方括号[ ]:可选参数,在命令中根据需要加以取舍
小括号( ):指明参数的默认值,只用于{ }中
竖线|:用于分隔多个互斥参数,含义为“或”,使用时只能选择一个。
省略号…:任意多个参数。
3. 例子
1、[ --atime-preserve ],表示一个可选选项。
2、[ -B, --read-full-records ],表示一个可选选项,简写为-B,完整写法是–read-full-records,两者在用的时候只能选择其一,它们的功能都是完全一样的。一般带 “-”开头的选项都是简写,“–”开头的命令都是完整写法,并且,一般的选择都有一个简写,一个完整写法,简写写在前面,完整写法写在后面,中间用逗号 分割。
3、[ -b, --blocking-factor N ],表示一个可选选项,简写为-b N,完整写法是–blocking-factor N,N代表这个参数需要一个值,在详细描述中可以看到。当然,选项可以带参数,也可以不带参数,大部分选项是没有参数的,相当于控制开关。命令的书写 如:tar -b=10000 -cvf com.tar.gz com
4、[ -F, --info-script F --new-volume-script F ],表示有两个同时存在的可选命令,-F F --new-volume-script F,两个选项必须同时出现,在此,后面的选项没有简写。
5、[ -z, --gzip, --gunzip, --ungzip ],表示一个可选选项,它的写法有多种,除了-z之外,其他的都是它的完整写法。
6、[ -[0-7][lmh] ],表示嵌套的可选选项,0-7表示取值从0到7取一个。
在描述命令行参数的时候,对其格式有些约定俗成的写法,各系统之间也有差别。一般采用的格式如下:
命令 <必选参数1|必选参数2> [-option {必选参数1|必选参数2|必选参数3}] [可选参数…] {(默认参数)|参数|参数}
2 vim的一些自己大概率用到的命令
命令 | 效果 | 命令 | 效果 | 命令 | 效果 |
---|---|---|---|---|---|
:w | 保存修改,但是不退出文件 | $ | 移动到行尾 | ynw | 复制n个单词 |
:w! | 强制保存但是不退出文件 | nG | 光标定位到第n行行首 | yy | 复制一行 |
:q! | 退出文件,不保存文件 | gg | 光标定位到第一行行首 | nyy | 复制n行 |
:wq | 退出文件,保存修改 | G | 最后一行行首 | p | 光标后开始复制 |
:set nu | 显示行号 | ctrl+f | 查看下一页内容 | P | 光标前开始复制 |
:set nonu | 取消行号 | ctrl+b | 查看上一页内容 | u | 撤销刚才操作 |
:set ic | 查找时不区分大小写 | dw | 删除一个单词 | ctrl+r | 恢复撤销操作 |
:set noic | 查找时区分大小写 | dnw | 删除n个单词 | 0(是阿拉伯数字零) | 移动到行头 |
dd | 删除一整行 | ^ | 移动到本行第一个不是空的字符 | yw | 复制一个单词 |
dd | 删除一整行 | ndd | 删除n行 |
3. chmod命令
参考网址是:https://www.cnblogs.com/linuxandy/p/10881918.html
1. 群组的概念
当你在团队开发资源时,群组显得很重要,举例来说,现在有两个项目在同一个主机,第一个项目为ProjectA,成员有calss1,class2,class3;第二个项目为ProjiectB,成员有class4,class5,class6。位于同组的组员他们可以互相修改对方的数据,但是其他组的成员不能查看自己组的内容。
对每个用户设立权限是效率非常低的方法,我们可以将用户分组,让文件的权限按组分配,就能限制非自己群组的人不能阅览本组内容,但本组组员可以无限制的修改自己的文件,当然还可以设置连本组组员都不能访问我的文件。
2.参数解释
chomd命令的语法是
chmod [-cfvR] [--help] [--version] [who] [+ | - | =] [mode] 文件名
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置 mode 所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
还有X,s,t,u,g,o等属性,用到再说吧。
例子
chmod ugo+r 1.txt //将文件 1.txt 设为所有人皆可读取
chmod a+r 1.txt //将文件 file1.txt 设为所有人皆可读取
//将文件 1.txt 与 2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w 1.txt 2.txt ```
```cpp
chmod u+x 1.py 将 1.py //设定为只有该文件拥有者可以执行
//将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
//此外chmod也可以用数字来表示权限如
chmod 777 file //这个详细的规则在参考网址里面
chmod abc file
五.常用功能
1 将时间转换成字符串并输出
#include <iostream>
#include <time.h>
using namespace std;
int main(){
time_t t = time(0);
char tmp[32];
strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&t));
cout<<tmp<<endl;
string temp_string = tmp;
string res = "123"+temp_string;
cout<<res<<endl;
}
六. Msys配置
msys可以当做一个linux命令行来使用。
- pacman -Sg:查看包
- pacman -S mingw-w64-x86_64-boost :安装这个boost.