0%

蒟蒻的zz码风

自认为码风就像代码的脸,无论是调试还是写题解都极其重要

下面是我的码风,莫喷

空格 & tab

松散胜于紧凑

  • tab宽度4
  • 运算符前后加空格
  • , 后加空格
  • 嫌挤的地方加空格
  • 大括号不换行(少说这个,引起战争)

大概一个 a+b 写成这样:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}

代码块分布

意思相近的语句、函数写到一块

大块数据结构包装起来

各个代码块间加空行(我乱加空行的怪癖改不掉)

顺序嘛:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 头文件
#include <iostream>
using namespace std;

// 快读
template<typename TT> inline void read(TT &x) { /*...*/ }

// 宏定义/结构体定义
#define ... ...
typedef long long LL;
struct Node {};

// 常量定义
const int N = ...;

// 变量定义
int n, m;
int a[N];

// 函数/包装用的结构体
void solve() {}
struct Splay {};

// 主函数
int main() {}

当然我喜欢总体套一个 namespace ,看这里

压行

曾经我是痛恨压行的,如今自己成为了曾经讨厌的人。。。

代码还是简洁的好

不过自认为压行并不是凑到一块那么简单

我曾见过这样的压行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline bool bfs(){
for (int i=0;i<=n+k+1;++i)cur[i]=head[i];
queue<int> q;
memset(deep,0x3f,sizeof(deep));memset(inq,0,sizeof(inq));
q.push(s);inq[s]=true;deep[s]=0;
while(!q.empty()){
int u=q.front(),v;q.pop();inq[u]=false;
for(int i=head[u];i;i=e[i].nxt){v=e[i].to;
if(deep[v]>deep[u]+1&&e[i].flow){
deep[v]=deep[u]+1;if(!inq[v]){q.push(v);inq[v]=true;}
}
}
}
return deep[t]!=INF;
}

不是我想针对谁,这样压行太拙劣了

压行要有原则和规范

  • 一行内尽量不出现多个;

  • { 后不要写东西, }另起一行(大括号一般使用时)

  • 不好理解或过于复杂的代码不压行

  • 熟练运用 C++ 语言特性来缩减语句

    • for/while 等里面只有一句时不加大括号
    • ,连接较短语句,作为一句(有时候还能少个大括号呢)
    1
    2
    for (int i = 1, u, v; i <= n; ++i)
    read(u), read(v), add(u, v);
    • 多用三目运算符代替简单的 if/else 判断
    1
    2
    get(fa) == get(x) ? rotate(fa) : rotate(x);
    (tag ? a1 : a2)[i] = x;// 雾
    • 多使用结构体的整体赋值
    1
    e[++cnt] = (Edge){head[u], v};
    • 运用&& ||的短路特性
    • 部分() []中嵌套一些简单赋值
    1
    2
    3
    for (int i = head[u], v; i; i = e[i].nxt)
    if ((v = e[i].to) != fa)
    ...

显然我的压行优越得多


总之敲代码要心情愉悦~

最后附上我美轮美奂的 vscode

update 2020.1.18

有人说“美轮美奂”不应该在这用,好吧我语文不好,只好说把我的VSCODE比喻为华丽的建筑

欢迎交流互鉴


平写题解都没见你bb这么多