ループを使わずに配列の順序を逆にしてみた

ループを使わずに配列の順序を逆にする。という問題があったのでやってみた.

答えは再起呼び出し.

#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にも対応したいな~.でもめんどいのでこの辺でやめとく.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です