よくあるバグの代表例は、
- 無限ループ
- out of bounds 系エラー
あたりだろう。
これらのバグは、ちょっとした事を実践することで回避することができる。
それは、whileループの禁止である。
whileループを使うと、
- やたらと処理が複雑になったり、
- 条件式が偽にならず無限ループになったり、
と悪いことばかり。
大抵のwhileループは、forループで書けるので、whileは禁止してしまってもいいかと思う。
(あと余談だが、ショートコーダーはwhileループは使わないらしい。)
例えば、この問題。
for文で書くと、綺麗に書けます。
whileで書くと、多分カオスになるでしょう。そしてバグが出るはず・・。
for文で書いたプログラムはこちら。
- vector<pair<int, int> >vec, ret;
- int main() {
- int n, s, t;
- scanf("%d", &n);
- while (n--) {
- scanf("%d %d", &s, &t);
- vec.PB(MP(s,t));
- }
- sort(ALL(vec));
- int pos = 0;
- for (;pos < (int)vec.size(); pos++) {
- int s = vec[pos].first;
- int t = vec[pos].second;
- for (; pos+1 < (int)vec.size() && vec[pos+1].first <= t; pos++)
- t = max(t, vec[pos+1].second);
- ret.PB(MP(s, t));
- }
- REP(i, ret.size())
- printf("%d %d\n", ret[i].first, ret[i].second);
- return 0;
- }
0 件のコメント:
コメントを投稿