代码风格
代码风格
1.文件结构与头文件
使用
#include <bits/stdc++.h>
竞赛环境通常支持,可减少记忆头文件的负担,提高编码速度。若环境不支持,则按需包含。建议使用标准的头文件
必须使用
using namespace std;
简洁优先,避免代码冗长。
|
万能头文件的缺点
- 编译时间增加
虽然 OI 通常不限制编译时间,但在一些在线评测系统中,如果编译器需要处理大量头文件,可能会轻微增加编译耗时。不过对大多数竞赛环境来说,这点影响可忽略。 - 非标准,可移植性差
该头文件并非 C++ 标准的一部分,只在 GCC 环境中可用(包括 MinGW、Clang 在某些模式下也支持)。如果比赛环境使用其他编译器(如 MSVC 或未配置的 GCC),代码可能无法编译。 - 命名冲突风险
由于包含了大量命名空间中的符号,可能会意外与自定义变量名冲突(虽然概率很低,但理论上存在)。 - 部分竞赛明令禁止
少数严格的竞赛(如 NOI 某些年份的官方比赛)可能要求选手不得使用bits/stdc++.h,或环境未预置该文件。若习惯依赖它,遇到此类限制会手忙脚乱。
2. 主函数规范
- 主函数必须返回
int,并以return 0;结束。 - **使用
int main(),不使用void main()**。
int main() { |
3. 代码排版
- 缩进:使用 2 个空格 或 4 个空格,统一即可。不用 Tab(不同编辑器显示宽度不同)。
- 大括号风格:采用 K&R 风格(左括号不换行),节省行数且清晰。
if (condition) { |
- 运算符两侧加空格,逗号后加空格,增强可读性。
int a = b + c; |
4. 命名规范
- 变量名:小写字母 + 下划线(
snake_case),如max_value、node_cnt。 - 常量:全大写 + 下划线,如
const int MAXN = 1e5 + 10;。 - 全局变量:可在前面加
g_前缀(可选),以明确作用域。 - 结构体 / 类名:首字母大写(PascalCase),如
struct Node。 - 避免使用
i, j, k以外的单字母变量名,除非是极短的循环或数组下标。
5. 变量定义
- 变量尽量在使用时定义,避免在函数开头全部堆砌。这符合 C++ 的习惯,也有助于减少未初始化的问题。
- 循环变量在 for 语句内定义:
for (int i = 0; i < n; i++) { } |
- 全局变量默认初始化为 0,但局部变量需显式初始化。
6. 输入输出
- 使用
cin/cout时,务必关闭同步:
ios::sync_with_stdio(false); |
- 之后不要再混用
scanf/printf。 - 若追求极致速度,可使用
scanf/printf或手写快读。
7. 常量与宏
- 用
const或constexpr定义常量,避免使用#define定义数值,除非是调试用的宏。
const int MAXN = 2e5 + 5; |
#define可用于简化长代码段的书写(如rep(i, n)),但需谨慎使用,且团队内保持一致。
8. 数组与下标
- 数组大小用常量定义,多开 5~10 的冗余防止越界。
- 下标从 0 开始,除非题目明确从 1 开始更自然(如图论邻接表)。
- 若从 1 开始,访问时保持一致性,避免混用。
9. 结构体与排序
- 重载
<运算符或定义比较函数时,注意const正确性。
struct Node { |
- 使用
sort(v.begin(), v.end())进行排序。
10. 调试与提交
- 调试时使用
#ifdef LOCAL包裹输出语句,提交前确保关闭。
|
- 提交前 删除所有调试输出,或通过条件编译屏蔽。
11. 典型代码模板
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 贾心奥利奥Ψ兔兔!
评论







