写在前面

众所周知,在 Dev-C++ 上有一个代码格式化的功能,快捷键Ctrl+Shift+A

我的码风致力于写出格式化后毫无变化的代码,这被认为是标准代码

同时,对不可格式化的部分(如空格),我同样也会详细说明

值得一提的是,我的码风是跟着 lydrainbowcat 学的,在此致谢

头文件

一般情况下使用万能头文件,即:

#include <bits/stdc++.h>

注意 include 后有空格

不使用万能头文件的情况:

  • POJ 等不能使用万能头文件的OJ上提交

  • std

这种情况下,不同的头文件按照长度为第一关键字,字典序为第二关键字从上至下依序排列,如:

#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

原则上不必要的头文件不写

宏定义 & const

宏定义用于简写出现多次的较长字符串,如:

#define ll long long
#define pii pair<int, int>

或利用宏定义简写整条语句,如:

#define For (i, l, r) for (int i = l; i <= r; i++)
#define get(x) (t[t[x].f].ch[1] == x)

const 用于且只用于定义常量,如;

const int N = 1e5 + 6;
const double eps = 1e-6;

注意,const 如果由于定义表示数组大小的常量,则:

  • 其中代表常量的字符必须大写

  • 数必须为 xey + 6 的形式,其中 x, y 为具体的数

using namespace std;

紧跟在待 # 号的语句后面写,待 # 号的语句包括:

  • 头文件
#include <...>
  • 宏定义
#define ... ...

快读

平时禁止使用,比赛/考试时视情况而定

模板:

inline int rd() {
    int x = 0, o = 1;
    char ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-') o = -1;
    for (; isdigit(ch); ch = getchar())
        x = x * 10 + ch - '0';
    return x * o;
}

空格

下列情况使用空格:

  • 逗号,分号之后

  • for, while, if 之后

  • 任何运算符号的前后

  • 大括号不换行,在大括号之前

  • 结构体定义完后直接声明变量,在反大括号之后

下列情况禁止使用空格,若与上面矛盾以禁止为优先:

  • [] 内一个空格都不能有

  • ( 的右边,) 的左边

  • ++, -- 与变量之间

空行

用于且只用于下列情况:

  • 所有全局变量定义在开头,全部定义完之后

  • 两个函数之间

  • 主函数之后

inline

非递归函数时必须使用,递归函数时禁止使用

register

禁止使用

typedef

禁止使用

逗号

用于一次声明多个同类型变量,如:

    int x, y;

可以适当利用逗号压行,如:

    x = q.top(), q.pop();

ios::sync_with_stdio(0)

一般情况下禁止使用,但在使用 string 时例外,注意使用后不能用 scanf, printf

输入

少量输入使用 cin,大量输入使用 scanf

输出

少量输出使用 cout,大量输出使用 printf

大括号

一条语句禁止打大括号,多条语句必须打大括号而定

自加,自减

循环时必须在变量之后,其他视具体情况而定

下标

推荐从 1 开始,但不禁止从 0 开始

位运算

能使用位运算代替就尽量使用,但不能影响程序的可读性

05-08 07:58