$\text{前言}$
在刷题的过程中 , 我们会见到各逝式各样的码风 . 当然不乏有些「非主流」( 个人认为 , 不喜勿喷 ) :
比如极为玄学的 $3$ 格缩进 ( 但是我有时候感觉还挺好看的 ( 雾 , 以及看半天看不到一个空格分开语句 / 表达式的「紧凑代码」 , 还有从 $a$ 命名到 $z$ 的「屎山代码」( “屎山” 其实有很多方面 , 只是这点我很不能忍受 ) .
当然 , 码风习惯因人而异 , 自己觉得好看的码风或许在别人眼中十分另类 .
所以我的码风如果有不满意的地方别乱喷 . ( 😖
$\text{头文件}$
以前是用万能头 , 现在的话是要用什么写什么 . 尽量避免命名冲突导致 $CE$ ( $22$ 年 $CSP-S$ 就是因为命名 $CE$ 两道题 , 关键是当时并不知道那玩意是关键字 , $dev$ 滚一边去 ) .
另外 , 在 include
之后会打一个 ' '
. 并且 , 采用 $C++$ 风格头文件 .
$\text{Example :}$
#include <bits/stdc++.h> // 已弃用
#include <iostream>
#include <ctime>
#include <string>
$\text{using 语句}$
直接写 using namespace std
, 用自己写的 namespace
时 , 一般写 using 命名空间名::变量/函数/其它
. ( 毕竟用不了那么多 , 要是都用写 namespace
干嘛 ) .
如果 using
能写在 namespace
的 '}'
后面且只需要一句 , 那么就写在这后面 , 细节见下列代码 .
$\text{Example :}$
namespace Rui_Ethereal {
auto ToDoSomething() { }
} using namespace Rui_Ethereal::ToDoSomething;
namespace Rui_Ethereal {
const auto SIZE = 114;
auto ToDoSomething() { }
}
using Rui_Ethereal::SIZE;
using Rui_Ethereal::ToDoSomething;
偶尔用其代替 #define
或 typedef
.
$\text{主函数main}$
signed main() {
return 0;
// 有时候不会加返回值 .
}
返回类型用 signed
而不用 int
.
$\text{缩进 and 括号风格}$
1 . 采用 $4$ 个空格缩进而不是 TAB
.
2 . 能不加大括号就不加大括号 .
if(条件式) DoSomething; // 只有一条语句那么不加大括号
else {
DoThis;
DoThat;
// 不止一条语句
}
3 . 函数写法 :
auto 函数名(参数) -> 返回类型;
有必要的话会写 inline
. 空参写 void
, 调用时不写 .
缺点 : 有时候忘写返回类型 CE
4 . 函数主体 ( 非 template
部分或者其它 ) 要么写一行 ( 即一条语句 ) , 要么不少于 $4$ 行 ( 包括结束时的 }
) .
template <typename _Tp>
inline auto Max(const _Tp &a,const _Tp &b) -> _Tp { return a < b ? b : a; }
inline auto GetChar(void) -> char {
if(in_ptr == end_addr) {
in_ptr = buffer;
end_addr = ibuffer + fread(buffer,1,CACHE,stdin);
}
return in_ptr == end_addr ? EOF : *in_ptr++;
}
5 . 不刻意压行 , 三目除外 , 并且能用三目且比较好写的话就用三目 . ( ?:
)
6 . 空格规范 :
特殊写法
( $1$ ) for(auto _((BEGIN));_ <= END;++_)
( $2$ ) for(auto &v : G[u])
( $3$ ) {
与 }
不在同一行 , {
前加空格 . 反之 , {
两边都要加 , }
前加后不加 .
( $4$ ) &&
和 ||
一般用 and
和 or
代替 .
前后都要加空格 :
+
, -
, *
, /
, +=
, -=
, *=
, /=
, ==
, !=
, %
, %=
等 .
二进制运算符 &
, |
, ^
, <<
, >>
, &=
, |=
, ^=
, <<=
, >>=
.
三目运算符 ? :
前加后不加 :
&
( 作为地址运算符 ) , *
( 指针运算符 )
前后都不加 :
::
( 作用域解析符 ) , ,
, ;
, .
( 成员 ) , []
( 下标 ) , ->
( 指针 ) .
大概就这些吧 , 其它的看一下我写的代码就行 .