[英]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--;
}
將for循環更改為如下所示:
for (int i = 0; i < size / 2; i++)
{
std::swap(*data, *lastElement);
data++;
lastElement--;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.