编程码风汇总

本文章摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/bian-cheng-ma-feng-hui-zong

此文章方便您了解 shaoziqi这个蒟蒻和 OIer的码风


目录:

1. 前言

2. 码风说明

2-1. 注释代码

2-2. 代码人身攻击

2-3. 打空格

2-4. 自定义函数

2-5. 万能头

2-6. 大括号

2-7. 快读

2-8. STL

3. 后记


1. 前言

众所周知,每个人都有自己的码风,无论AFOer现役OIer,各自的码风也是千奇百怪。

在这里引用一个我所看到的最奇怪的代码

airport.inputln<<("%d%d%d",n,m,s).split(); System.out.airport.writeln>>("%dn",&k)>>endl; 

我看不懂,但是我大受震撼

我也不知道这里面包含了几种编程语言

Upd: 后来才知道是OIer用的三种语言大杂烩

所以,我必须要做一期编程码风的汇总。

2. 码风说明

2-1. 注释代码

一般的大犇都喜欢给代码上注释(当然指有意义的注释),以方便自己在打代码时可以了解自己之前的解题思路

这里举一个例子:

if(j>=a[i]){ 	d[j]-max(d[j-1],d[j-a[i]]); //这里用来完成一维数组的 dp } //如果是10^6的数据规模应该会有80分 

但是如果你没有注释,很难让自己或者他人理解你代码的思路

比如说:

scanf("%d",&n); for(int i=1;i<=n;i++) { 	qaq(i); 	kkk(); } orz(); 

尤其是这种使用一大堆自定义函数的程序,解题思路就很难懂。

Upd: 这是我代码

2-2. 代码人身攻击

在此提醒各位:辱骂有风险,整活需谨慎

鉴于 €€£ 的一系列 save money 的行为,因此万千 OIer 在考场上有辱骂 CCF 的行为。

甚至以至于禁三年

举个例子:

return 0; //CCFrnm退钱 

鲜活的禁三人

ccf[i][j]=dp(i-1,min(j-ccf[i-1][j],114514)); 

Upd以上代码均有出处,为避免人身攻击不将其公布

2-3. 打空格

有一些大佬,喜欢在代码拥挤时打空格以方便找错和调试

还有一些人为了节省码代码的时间,不打空格。

总之,这个习惯因人而异,而不是 OIer 强求的习惯

还是举个例子

for (int i = 1;i <= n;i ++) { 	int k = a [i]; 	if (k <= a[i - 1]) ans ++; } 

以及另一个例子

for(int i=1;i<=n;i++) { 	int k=a[i]; 	if(k<=a[i-1]) ans++; } 

upd: 我似乎不怎么打空格??

2-4. 自定义函数

自定义函数可以让主程序更简洁,有时候也可以让代码思路更清晰(当然有时候可能会增加复杂度)。

在代码中一些自定义函数是很有用的,比如 dfs,bfs,dp,cmp 等,还有一些函数如果不在根本上改变性质毫无用处的,比如 max,min,sqrt 等。

大部分时候,自定义函数是能帮助到您解决很多实际性问题的

一个大佬的主程序:

#include <bits/stdc++.h> #define ...... ...... using namespace std; ...... void imp(int k,int t) {   ...... } void ...... ...... int main() { 	int n,m; 	ios::sync_with_stdio(false); 	cin>>n>>m; 	imp(n,m,1); 	cos(a[1],d[1][1]); 	dfs(n,1); 	outans(d[1][1]); 	return 0; }  

这个代码长约 200 行我就不放了 %%%Orz 大佬

另一部分人的主程序:

#include <bits/stdc++.h> using namespace std; int main() {   ......   return 0; }    

同样 150 多行的代码很明显就烦琐了。

Upd: 感觉身边 dalao 真多啊。

2-5. 万能头

根据可靠消息得:万能头会占用 2MB 的空间

#include <bits/stdc++.h> 

这个万能头包含了 C++ 所有的头文件,解决了无数人苦记头文件的痛苦

Upd: 想当初我在小六时为了记头文件差点 JC ......

但是,真正的巨佬是不会用头文件的!他们宁可记头文件也不要多余的内存消耗

为伟大的 OIer 们致敬!!!

至于 C++ 有多少头文件,懂的都懂。

Upd: 我没有考虑 P 党的想法十分抱歉

2-6. 大括号

一些人喜欢在代码循环和判断语句外打大括号。

这其实是很好的习惯,这可以让更多人看出代码的运行方便调试

代码比对如下:

for(int i=1;i<=n;i++){    int k=a[i];    for(int j=1;j<=n;j++)    if(k<=a[j])    k=a[j];    cout<<k<<endl; } 

还有一份:

for(int i=1;i<=n;i++){    int k=a[i];    for(int j=1;j<=n;j++){       if(k<=a[j]){     	    k=a[j];         }    }    cout<<k<<endl; } 

通过比对,很明显看出来代码二更有条理性,虽然它们的运行都是一样的

2-7. 快读

一般来说,快读可以减少运行时间

常见的快读有以下几种:

(1) 函数

ios::sync_with_stdio(false); 

(2) 模板

inline int read() { 	char ch=getchar(); 	long long f=1,res=0; 	while(ch<'0'||ch>'9') 	{ 		if(ch=='-') f=-1; 		ch=getchar(); 	} 	while(ch>='0'&&ch<='9'){ 		res=(res<<1)+(res<<3)+ch-48,ch=getchar(); 	}    return res*f; } 

类似的还有快写模板:

inline void write(long long x) { 	char buf[100]; 	int len=-1; 	if(x>=0) while(x) buf[++len]=x%10+48,x/=10; 	else 	{ 		putchar('-'); 		while(x) buf[++len]=-(x%10)+48,x/=10; 	} 	while(len>=0){ 		putchar(buf[len--]); 	} } 

如果考场上模板不会,那就用函数吧!

2-8. STL

C++ 有个好东西,叫 STL,经常能帮助大佬们完成一大半的操作

(1)栈

vector<int> v; 

vector 是个好东西,可以自动模拟实现栈

(2)快排

sort(a+1,a+n+1); 

这么一个快排函数,完成了手动模拟几十行的程序。

(3)映射

map<string,int> mp; 

这个函数,不用 dfs 用一重循环完成了两重循环完成的事。

(4)其他函数

对于函数而言,使用者是操作者本人,这个习惯也是因人而异。但是谨记一点:STL 好用,但是不能滥用

3. 后记

无数人,无数码风,为的是心中不变的信仰!

谨以此文致敬所有 OIer!!!

发表评论

评论已关闭。

相关文章