C++机试技巧

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 = {
    second3.141590,
    third"method three",
    first-10,
    four0.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];
}