seve 的 代码规范

1. 命名规范

1.1 变量命名

  • [1.1.1] 使用小写字母与下划线组合
    所有变量应使用小写字母,多个单词使用下划线连接。
    ✅ 例:

    int cur_node, scc_cnt;
    
  • [1.1.2] 必要时可省略下划线以提高输入速度
    在代码结构清晰或命名长度过长时可适当省略下划线。
    ✅ 例:

    int scccnt;
    
  • [1.1.3] 避免非通用缩写
    除了广泛使用的缩写(如 cntnmdfn),其余尽量使用完整单词。

  • [1.1.4] 常量命名采用全大写加下划线
    ✅ 例:

    constexpr int MAXN = 1e4 + 10;
    
  • [1.1.5] 常量INF定义应为1e9 1e18而不是2147483647这样的极限值,出现超过2次的神秘数字应设为常量

1.2 函数命名

  • [1.2.1] 使用小写字母与下划线组合
    ✅ 例:

    void add_edge(int u, int v);
    void tarjan(int u);
    

1.3 结构体与类命名

  • [1.3.1] 使用 PascalCase(大驼峰)命名法
    ✅ 例:

    struct Edge {
        int to, next;
    };
    

1.4 宏与类型别名命名

  • [1.4.1] 宏名必须全大写并使用下划线分隔
    ✅ 例:

    #define LOCAL
    
  • [1.4.2] 类型别名使用 using 代替 #define
    ❌ 不推荐:

    #define int long long
    

    ✅ 推荐:

    using ll = long long;
    

2. 容器与数据结构使用规范

2.1 序列容器

  • [2.1.1] 优先使用 std::bitset 替代 bool 数组
    ✅ 例:

    bitset<MAXN> instk;
    
  • [2.1.2] std::vector 用于动态大小数组,避免固定长度场景

  • [2.1.3] 固定长度数组优先使用 std::array
    ✅ 例:

    array<Edge, MAXM> e;
    array<int, MAXN> head;
    
  • [2.1.4] std::stack, queue, priority_queue 等 STL 容器优先使用,避免手写实现

2.2 关联容器

  • [2.2.1] 当时间复杂度容忍时可使用 set/map 替代数组
  • [2.2.2] 避免使用 unordered_map/set 进行离散化(哈希易炸)
  • [2.2.3] 离散化建议使用排序 + unique + lower_bound

3. 实现规范

3.1 输入输出方式

  • [3.1.1] 默认使用 cin / cout,必要时使用快速 IO
  • [3.1.2] 禁止混用 scanf/printfcin/cout

3.2 格式规范

  • [3.2.3] 布尔值直接使用 true / false,不比较 == true
    ✅ 例:

    if (instk[v]) ...
    
  • [3.2.4] 所有变量声明时空格规范
    ✅ 例:

    int n, m;
    

3.3 实现细节规范

  • [3.3.4] 推荐使用auto遍历迭代器,但是不要使用中括号打包,推荐引用
  • [3.3.5] vector优先预分配空间
  • [3.3.6] 不使用define, 而是使用inline内联。特别的,短函数应加inline标签
  • [3.3.7] 取模时应在只需减的时候减
  • [3.3.7] 带/的不等式判断需要移项尽量避免除法运算

4. 代码格式与结构风格

4.1 文件头

  • [4.1.1] 使用万能头文件

    #include<bits/stdc++.h>
    
  • [4.1.2] 使用 using namespace std;

4.2 常量定义

  • [4.2.1] 使用 constexpr 而非 const 定义常量

4.3 缩进与空格

  • [4.3.1] 使用 tab 缩进(4 空格)

  • [4.3.2] 运算符、比较符号前后留空格
    ✅ 例:

    if (a == b && x + y > z)
    

4.4 结构体写法

  • [4.4.1] { 紧跟结构体名,不另起一行
    ✅ 例:

    struct Edge{
        int to, next;
    };
    
    • [4.4.2] 优先使用构造函数而不是init()

4.5 长行换行风格

  • [4.5.1] 当超过一行时,在逻辑操作符(如 &&, ||, +, -)处换行对齐
    ✅ 例:

    if (x > 0 && 
        y > 0 && 
        z > 0) { ... }
    

5. 调试与断言规范

  • [5.1.1] 禁止调试信息混入正式代码提交
  • [5.1.2] 推荐封装调试宏 #ifdef LOCAL ... #endif

✅ 推荐:

#ifdef LOCAL
#define debug(x) cerr << #x << " = " << x << endl;
#else
#define debug(x)
#endif
  • [5.1.3] assert 用于关键边界条件检测
    ✅ 例:

    assert(1 <= n && n <= MAXN);
    

6. 风格性防御性编程

  • [6.1.1] 注意越界判断和边界保护
  • [6.1.2] 禁止过度宏定义(如定义 int 为 long long)除非题目强制需要
  • [6.1.3] 多组数据处理必须提前初始化所有状态

posted @ 2025-07-16 19:23  Dreamers_Seve  阅读(21)  评论(0)    收藏  举报