[留档]AJH的码风整理(持续更新中)

注意:本文仅作为作者对于 OI 题的码风留档,不符合当今主流代码规范也不够易读,您不需要也不应该学习此种码风。
感觉自己的码风还是比较独特的,特此记录一下。 ——2020.4.4
(Update 2020.6.30:)微调了一些地方。
(Update 2020.8.10:)微调了一些地方。
(Update 2020.10.21:)加入了命名模块,微调了一些地方。
(Update 2020.12.3:)微调了一些地方。
(Update 2021.1.19:)更改了缩进的长度。
排版参照Menci's Code Style for OI

整体

在代码中提前插入这一段,必要时可视情况#define int LL(正式考试中不建议)。

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#include<stack>
#include<queue>
#include<vector>
#include<bitset>
#include<set>
#include<map>
#define LL long long
#define rg register
#define il inline
#define us unsigned
#define eps 1e-6
#define INF 0x3f3f3f3f
#define ls k<<1
#define rs k<<1|1
#define tmid ((tr[k].l+tr[k].r)>>1)
#define nmid ((l+r)>>1)
#define Thispoint tr[k].l==tr[k].r
#define pushup tr[k].wei=tr[ls].wei+tr[rs].wei
#define pub push_back
#define lth length
#define pii pair<int,int>
#define mkp make_pair
using namespace std;
inline void Read(int &x){
  int f=1;
  char c=getchar();
  x=0;
  while(c<'0'||c>'9'){
    if(c=='-')f=-1;
    c=getchar();
  }
  while(c>='0'&&c<='9'){
    x=(x<<3)+(x<<1)+c-'0';
    c=getchar();
  }
  x*=f;
}

一般会在下面加一句#define N 数据范围,其中N可改为M等其他名称,但一定要为单个大写字母
数据范围视情况而定,一般是题中最大数据+10
接下来是定义区,题目中用到的大部分变量都将在此定义为全局变量。
紧接着是结构体区,题目中所用到的结构体将在此定义,格式为:

struct 结构体名 {
  结构体内变量 
}数组名;
与之相关的部分变量(如链式前向星的head、cnt等)
与之相关的函数或重载符号(如链式前向星的Ade、排序用的Cmp等)

再往下是函数区,用于定义题中用到的所有函数。
函数实现必须跟在函数声明后方。
main函数一定要在最后。
整篇代码尽量无空行(代码过长时用于区分意义相关的语句块)。

缩进

一律使用2空格的tab缩进,tab个数如下:
缺省源和定义区绝对不能缩进。
函数、结构体等的定义、结尾大括号绝对不能缩进。
函数、结构体等内部多缩进4空格/一个tab。
if,else,for,while,do-while等引领的语句块多缩进2空格/一个tab。
例:

inline void Floyd(){
  for(rg int k=1;k<=n;k++){
    for(rg int i=1;i<=n;i++){
      for(rg int j=1;j<=n;j++){
        if(f[i][j]>f[i][k]+f[j][k]){
          f[i][j]=f[i][k]+f[j][k];
        }
      }
    }
  }
}

大括号

if,elsefor,while,do-while等引领的语句块如果只有一行较短代码(具体长度参照下文“行”部分)则可不加大括号直接写。
其他情况必须加大括号,左大括号绝对不能换行,右大括号应与对应左大括号所在行的缩进一致。
例:

for(rg int i=1;i<=n;i++)Read(a[i]);
for(rg int i=1;i<=m;i++){
  int u,v,t;
  Read(u),Read(v),Read(t);
  if(t==1)Ade(u,v);
  else Ade(u,v),Ade(v,u);
}

空格

以下这些地方必须且只能加一个空格:
1.结构体名后方的左大括号前。
2.else后方的左大括号前。
3.do-whiledo后方的左大括号前。
除此之外的其他地方,可不加空格的绝对不能加多余的空格(例如:运算符两边、逗号或分号后方等)。

原则:语句块内尽量少换行,每行长度不限,但要尽量可读(此处“可读”指一行代码不超过100字符)。

命名

对于题中给出的变量,应在不重复的情况下尽量保持原样。
函数名尽量使用帕斯卡命名法,数组名可以使用均为小写字母的单词缩写。
临时变量应为单个小写字母(如i,j,k,x,y,u,v等)。
习惯用法(如矩阵名A,E、手写min,max等)可以保留。
当函数名出现全大写+开头大写时,为避免混淆可以在中间添加一个下划线。
例:

void GetMin(...){
  ...
}
int AVeryVeryVeryVeryVeryVeryLongFunction(...){
  for(rg int i=1;i<=n;i++){
    int u,v;Read(u),Read(v);
    Ade(u,v),Ade(v,u);
  }
}
void DFS_First(int u){
  ...
}
原文地址:https://www.cnblogs.com/juruoajh/p/12632444.html