为什么这种反向算法不起作用?
Why isn't this reverse algorithm working?
#include <iostream>
void intswap ( int * pa, int * pb )
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
void reverse ( int * arr, size_t n )
{
int * end = arr + n;
while (arr != end && arr != --end) intswap(arr++,end);
}
int main ( )
{
int myArray [] = {1, 69, 0, -123, 1377};
size_t n = sizeof(myArray)/sizeof(int);
reverse(myArray, sizeof(myArray, n));
for ( size_t i = 0; i < n; ++i ) std::cout << myArray[i] << " ";
return 0;
}
生产
-123 0 69 1 1377
我做错了什么?毕竟,它和这里看到的算法是一样的:http://www.cplusplus.com/reference/algorithm/reverse/
您的问题是,由于逗号操作符sizeof(myArray, n)
与sizeof(n)
完全相同,这在您的情况下显然是4字节。你可能只是想说n
。
Mark B已经指出了你代码中的问题。这是一个提高代码可读性的建议。您可以将reverse
更改为:
void reverse ( int * arr, size_t n )
{
int * end = arr + n;
while ( arr < end )
{
--end;
intswap(arr, end);
++arr;
}
}