iteration.
飲み物だから太らない - 帯に短し襷に長し
配列を頭からとお尻から同時に辿りたい時の話。
0 origin の array[n - i - 1] は array[(n-1) - i] であるのに対し
1 origin の array[n - i + 1] は array[n - (i-1)] なのが面白いですよね。
あっちを立てればこっちが立たず。
無理やり実現しようとすると
last = n-1; for (i = 0; i <= last; i++) { calc(array[i], array[last-i]); }
とかになるんでしょうかね。
ここで、後ろから数えてi番目の要素の参照を返す演算子
operator![] なんかが定義できると
for (i = 0; i < n; i++) { calc(array[i], array![i]); }
のように書けてうれしいかもしれない。
C++ だと rbegin/rend が似たような処理を提供するのだけれど
for (i = 0; i < n; i++) { calc(*(v.begin()+i), *(v.rbegin()+i)); }
とか
for (i = v.begin(), j = v.rbegin(); i != v.end(); ++i, ++j) {
calc(*i, *j);
}
とかなって、あまり綺麗には書けないというか、C++ なコードになってしまう。
うーん、物悲しい…。