簡體   English   中英

為什么這種反向算法不起作用?

[英]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;
   }
}

使其更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM