zoukankan      html  css  js  c++  java
  • [留档]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){
      ...
    }
    
  • 相关阅读:
    老王学jsp之javabean与表单
    老王学jsp之http500错误
    老王学jsp之session
    转 Fiddler抓取HTTPS
    PHP 大型网站优化 大数据大并发大流量
    大流量、高并发的网站的底层系统架构
    大流量、高并发Web系统搭建(单机到分布式集群)
    Failed to start Load Kernel Modules
    ubuntu 16.04 我的任务栏呢 怎么只剩下桌面了
    跳坑日志之腾讯服务器不见了
  • 原文地址:https://www.cnblogs.com/juruoajh/p/12632444.html
Copyright © 2011-2022 走看看