簡體   English   中英

C ++:基本數組交換

[英]C++: A Basic Array Swap

我根本不明白為什么以下代碼不起作用。 交換操作不起作用的可能原因是什么?

#include <iostream>

using namespace std;

void rotateK(int* arr, int start, int finish) {
    int temp;
    for(int i=0;i<=finish;i++) {
        temp=arr[i];
        arr[i]=arr[finish-i];
        arr[finish-i]=temp;
    }
    for(int i=0;i<=finish;i++)
        cout<<arr[i]<<" ";
    cout<<endl;
}


int main(){
    int arr[5]={1,2,3,4,5};
    rotateK(arr,0,4);
    return 0;

}

它確實可以工作(盡管不是您希望它如何工作)。 但是將元素交換兩次 ,這就是為什么處理后的數組與原始數組相同。

您可能想要:

for(int i=0 ; i<=finish/2 ; i++)

甚至

for(int i=start;i<=(finish-start)/2 + start;i++)

以便您實際使用start

您要交換元素兩次。 您可以考慮翻轉數組段的想法。

int i = start;
int j = finish;
while( i < j ) {
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
    ++i; --j;
}

如果這樣寫,很難犯一個錯誤。

暫無
暫無

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

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