vs2018 快捷键
CTRL + J 列出成员
Ctrl+E,D 格式化全部代码
Ctrl+K,F 格式化选中的代码
CTRL + SHIFT + E 显示资源视图
F12 转到定义
CTRL + F12 转到声明
CTRL + ALT + J 对象浏览
CTRL + ALT + F1 帮助目录
CTRL + F1 动态帮助
CTRL + K, CTRL + C 注释选择的代码
CTRL + K, CTRL + U 取消对选择代码的注释
CTRL + U 转小写
CTRL + SHIFT + U 转大写
F5 运行调试
CTRL + F5 运行不调试
F10 跨过程序执行
F11 单步逐句执行
头文件
标准c库
头文件 | 说明 | 头文件 | 说明 | 头文件 | 说明 |
---|---|---|---|---|---|
assert.h | 断言相关 | ctype.h | 字符类型判断 | errno.h | 标准错误机制 |
float.h | 浮点限制 | limits.h | 整形限制 | locale.h | 本地化接口 |
math.h | 数学函数 | setjmp.h | 非本地跳转 | signal.h | 信号相关 |
stdarg.h | 可变参数处理 | stddef.h | 宏和类型定义 | stdio.h | 标准I/O |
stdlib.h | 标准工具库 | string.h | 字符串和内存处理 | time.h | 时间相关 |
c++ STL
using namespace std;
头文件 | 说明 | 头文件 | 说明 | 头文件 | 说明 |
---|---|---|---|---|---|
algorithm | 通用算法 | deque | 双端队列 | vector | 向量 |
iterator | 迭代器 | stack | 栈 | map | 图(键值对) |
list | 列表 | string | 字符串 | set | 集合 |
queue | 队列 | bitset | bit类 | numeric | 数值算法 |
常用头
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
常用宏定义
//求最大值和最小值
#define MAX(x,y) (((x)>(y)) ? (x) : (y))
#define MIN(x,y) (((x) < (y)) ? (x) : (y))
//取余
#define mod(x) ((x)%MOD)
//for循环
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)
//返回数组元素的个数
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
//初始化数组
#define MT(x,i) memset(x,i,sizeof(x))
#define MEM(a,b) memset((a),(b),sizeof(a))
//符号重定义
#define LL long long
#define ull unsigned long long
#define pii pair<int,int>
//常见常数
#define PI acos(-1.0)
#define eps 1e-12
#define INF 0x3f3f3f3f //int最大值
const int INF_INT = 2147483647;
const ll INF_LL = 9223372036854775807LL;
const ull INF_ULL = 18446744073709551615Ull;
const ll P = 92540646808111039LL;
const ll maxn = 1e5 + 10, MOD = 1e9 + 7;
const int Move[4][2] = {-1,0,1,0,0,1,0,-1};
const int Move_[8][2] = {-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
结构体
定义
struct InitMember
{
int first;
double second;
char* third;
float four;
};
初始化
方法一:定义时赋值
struct InitMember test = {-10,3.141590,"method one",0.25};
方法二:定义后逐个赋值
struct InitMember test;
test.first = -10;
test.second = 3.141590;
test.third = "method two";
test.four = 0.25;
方法三:定义时乱序赋值(C++风格)
struct InitMember test = {
second:3.141590,
third:"method three",
first:-10,
four:0.25
};
方法四:构造函数
//定义图的定点
typedef struct Vertex {
int id,inDegree,outDegree;
vector<int> connectors; //存储节点的后续连接顶点编号
Vertex() : id(-1),inDegree(0),outDegree(0) {}
Vertex(int nid) : id(nid),inDegree(0),outDegree(0) {}
} Vertex;
//定义Graph的邻接表表示
typedef struct Graph {
vector<Vertex> vertexs; //存储定点信息
int nVertexs; //计数:邻接数
bool isDAG; //标志:是有向图吗
Graph(int n, bool isDAG) : nVertexs(n), isDAG(isDAG) { vertexs.resize(n); }
Graph() : nVertexs(1), isDAG(1) { vertexs.resize(1); }
//向图中添加边
bool addEdge(int id1, int id2) {
...
...
...
return true;
}
} Graph;
Graph g(8, false);
运算符重载
typedef struct{int id;int h;} node;
bool operator <(const node& a,const node & b){return (a.h)<(b.h);}
c++new的使用
常规
int *x = new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
int *a = new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
char *b = new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
float *p=new float (3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
动态申请列大小固定的二维数组
//列值固定
const int MAXCOL = 3;
cin>>row;
//申请一维数据并将其转成二维数组指针
int *pp_arr = new int[nRow * MAXCOL];
int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr;
//此时p[i][j]就可正常使用
动态申请大小不固定的二维数组
cin>>row>>col;
int **p = new int*[row];
for (int i = 0; i < row; i ++)
{
p[i] = new int[col];
}