最初の要素が最後になり、最後の要素が最初になるように、大きな配列を逆にする必要があります。
これまでは、この配列のコピーを作成してこれを行い、次に元の配列を逆方向に繰り返してコピーに書き込みました。その後、コピーを元に書き戻します。
最初と最後の要素に同時にアクセスし、それらの1つを一時変数に格納して値を交換することにより、1つのループでこれを安全に行うことは可能ですか?
おそらく最も効率的な方法は、以下のようなインプレースアルゴリズムを使用することです(これは、ここにあるWikipediaの記事のアルゴリズムと同等です)。
for (int ix = 0; ix < len / 2; ix++) {
int t = arr[ix];
arr[ix] = arr[len - ix - 1];
arr[len - ix - 1] = t;
}
整数型の場合、より良い方法は...
int arr[5]={1,2,3,4,5};
int c=0,d=sizeof(arr)/sizeof(*arr)-1;
for(;c<d;c++)
{
arr[c] ^= arr[d-c];
arr[d-c] ^= arr[c];
arr[c] ^= arr[d-c];
}
XORは1バイトの命令であるため、スワップラインに沿って3バイトかかることはほとんどありません。
int Array[100];
unsigned int i, j;
for (i=0, j=100-1; i<j; i++, j--)
{
int t;
t = Array[j];
Array[j] = Array[i];
Array[i] = t;
}
reverse()関数を使用するか、これは非常に簡単な解決策になると思います
#include<iostream>
using namespace std;
int main() {
int n;
cin>>n;
unsigned int arr[n];
for(int i = 0; i < n; i++)
{
cin>>arr[i];
}
while(n)
{
cout<<arr[n-1]<<" ";
n--;
}
return 0;
}