2016-09-14 26 views
2

我想向左旋轉數組,例如rotateLeft3([1,2,3])→[2,3,1]如何將元素左移到數組中?

這是我的解決方案,但由於某種原因它不起作用。有人可以解釋我做錯了什麼嗎?

#include <iostream> 

using namespace std; 

int main() 
{ 
    bool six; 
    int Array[3] = { 1,2,3 }; 
    int x = sizeof(Array)/sizeof(Array[0]); 
    int temp = Array[0]; 
    int temp2; 
    for (int i = 0; i < x; i++) 
    { 
     Array[i] = Array[i + 1]; 
     Array[x - 1] = temp; 
    } 
    for (int i = 0; i < 3; i++) 
    { 
     cout << Array[i] << endl; 
    } 
    system("pause"); 

    return 0; 
} 
+1

我認爲你最大的問題在於,你不能在調試器中一步一步地運行它,看看它究竟發生了什麼故障。否則,你是非常接近的,只是覆蓋最後一個值太快而且太多次,並且由於'for'中錯誤的結束條件而超出了數組邊界。這兩個問題都可以/應該在調試器中被發現,繼續玩你的舊代碼,直到你學習如何使用調試器來發現這些事情。 – Ped7g

+0

你的意思是'把你的數組右移' –

回答

5

這將是正確的做法。 所以做如下改變你的代碼,
1)改變循環條件,以結束(x-1)(否則會出界)
2)拆下內循環
3)臨時分配循環結束後指定的值。

int temp = Array[0]; 
for (int i = 0; i < x-1; i++){ 
    Array[i] = Array[i + 1]; 
} 
Array[x-1] = temp; 

OR
,如果你想使用內置的模板,然後在algorithm

4

使用在algorithm頭定義的std::rotate使用std::rotate

編輯:

更好的鏈路是here, along with an implementation.

+1

我認爲建議有人學習如何編程(甚至在像自己的數組陣列旋轉那樣簡單的事情上失敗)來使用庫是毫無意義的。盲目使用你不明白的東西有什麼好處?當你最終解決這個問題時,這個問題不是直接在圖書館裏解決的,它可能非常複雜,如果沒有那些已經學會的基礎知識,就會完全失去。 – Ped7g

+0

@ Ped7g讓我們同意不同意。 – 2016-09-14 10:27:55

+1

@ Ped7g該鏈接顯示了一個實現,不僅僅是'std :: rotate'函數。太多次,海報會讓事情變得錯誤,最好的答案就是向他們展示它是如何完成的,並讓他們研究它。 – PaulMcKenzie

-1

最好的方法是使用std ::旋轉用於此目的

1

隨着std::rotate,這將是

std::rotate(std::begin(a), std::begin(a) + 1, std::end(a)); 

Demo

相關問題