为什么这个反向算法不起作用?

时间:2015-10-08 16:24:01

标签: c++ algorithm

#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/

2 个答案:

答案 0 :(得分:2)

你的问题是因为逗号运算符sizeof(myArray, n)sizeof(n)完全相同,在你的情况下显然是4个字节。你可能只想说n

答案 1 :(得分:-1)

Mark B已经在您的代码中指出了问题。这是一个提高代码可读性的建议。您可以将reverse更改为:

void reverse ( int * arr, size_t n )
{
   int * end = arr + n;
   while ( arr < end )
   {
      --end;
      intswap(arr, end);
      ++arr;
   }
}

使其更具可读性。