关于一种奇怪的码风
  • 板块灌水区
  • 楼主Untitled10032
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/2/28 19:09
  • 上次更新2023/10/23 23:30:26
查看原帖
关于一种奇怪的码风
402255
Untitled10032楼主2023/2/28 19:09

一个烂活,违规紫衫。

可以将对于一个或几个有关联的对象的操作连到一起(有点类似 cin/cout 在一个语句中的传递)。

  • 需要使用面向对象风格的代码。

  • 多进行赋值操作的封装,少使用取值操作的封装。

  • 每个函数返回被操作对象指针,从而把许多语句连起来。

举例:

P3373 【模板】线段树 2 这道题线段树的 pushdown 函数:

inline void pushdown(Node *now) {
    if (now->l != now->r)   now->ls->setVal(now->ls->val * now->mul + now->add * (now->ls->r - now->l + 1))->fa->rs->setVal(now->rs->val * now->mul + now->add * (now->r - now->rs->l + 1))->fa->ls->setAdd(now->ls->add * now->mul + now->add)->setMul(now->ls->mul * now->mul)->fa->rs->setAdd(now->rs->add * now->mul + now->add)->setMul(now->rs->mul * now->mul)->fa->ls->maintain()->fa->rs->maintain()->fa->setAdd(0)->setMul(1);
}

完整代码 (其中只有 pushdown 用了这种奇怪的码风,其它的功能没改)

缺点:

  • 代码冗长、不易读、运行效率差、易出 bug、不易调试、写代码消耗时间长。极不适合在比赛时使用。

优点:

  • 写着好玩。
2023/2/28 19:09
加载中...