ループを使わずに配列の順序を逆にする。という問題があったのでやってみた.
答えは再起呼び出し.
#include <iostream> #include <algorithm> void disp(int val){ std::cout << val << std::endl; } template <class T> void swap(T *a, T *b){ T temp=*a; *a=*b; *b=temp; } template <class T> void reverse(T *a, T *b){ b--; if(a>=b)return; swap(a,b); a++; reverse(a,b); } int main(){ int array[10]={1,2,3,4,5,6,7,8,9,10}; std::for_each(array,array+10,disp); reverse(array,array+10); std::for_each(array,array+10,disp); return 0; }
for_each使ってみたかっただけなんです><.reverse部分ではループ使ってない.
dispをテンプレートにしたときに,呼出側でdisp<int>みたいにしないといけないらしいので,今回はテンプレート化していない.
このプログラム,配列ならOKだけど,reverse_iteratorにも対応したいな~.でもめんどいのでこの辺でやめとく.