簡體   English   中英

C ++反轉數組未提供預期的輸出

[英]C++ Reversing an array not giving expected output

我正在嘗試使用指針遞增/遞減來反轉int數組。 當我運行它時,它會反轉到數組的中點,然后停止並向后移動。

這是我目前得到的結果:

Array size: 10

Original array:
   42   68   35    1   70
   25   79   59   63   65

Reversed array:
   65   63   59   79   25
   25   79   59   63   65

Expected outcome:
   65   63   59   79   25
   70    1   35   68   42

這是我正在使用的算法:

int temp = 0;
lastElement = &data[size - 1];

for (int i = 0; i < size; i++)
{
    *(data) = *(lastElement);

    data++;
    lastElement--;
}

編輯:

工作算法:

first = data;
last = &data[size - 1];

for (int i = 0; i < size / 2; i++)
{
    int temp = *first;
    *first = *last;
    *last = temp;
    first++;
    last--;
}

如果將陣列的一半換成另一半,則已經將整個陣列換了。 如果您將前半部分換成下半部分,然后將下半部分換成上半部分,那么您將回到開始的位置。 不要那樣做

由於算法在數組的開始和結尾使用指針,因此循環的每一步都交換兩個元素。 因此,您的循環應具有數組size/2步(如果有任何元素停留在當前位置,則為中間元素)。

first= data;
last = &data[size - 1];

for (int i = 0; i < size/2; i++)
{
    int temp = *first;
    *first = *last;
    *last = temp;
    first++;
    last--;
}

我建議您熟悉STL ,尤其是STL算法 反向算法(請參見帶有很好示例的鏈接文檔)。

將for循環更改為如下所示:

for (int i = 0; i < size / 2; i++)
{
  std::swap(*data, *lastElement);  

  data++;
  lastElement--;
}

暫無
暫無

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

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