2009-10-26 72 views
1

沒有使用任何stls,boosts和類似的東西我一直試圖旋轉我的數組中的元素。我一直在嘗試使用mod運算符,是有效的:使用mod運算符C++

void stack::rotate(int r) 
{ 
r = (r % maxSize + maxSize) % maxSize; 
for (int first_index = 0; first_index < r; ++first_index) 
{ 
    int mem = items[first_index].n; 
    int index = (first_index + r) % maxSize, index_prev = first_index; 
    while (index != first_index) 
    { 
    items[index_prev] = items[index]; 
    index_prev = index; 
    index = (index + r) % maxSize; 
    } 
    items[index_prev].n = mem; 
} 

如果項目是一個數組分配到項目結構。雖然它有點奇怪,但項目struct有一個整數'n'成員,所以我可以將它與整數類型的變量一起使用。

但它仍然沒有從正在添加右=(。林失去了我的第二個元素的內容,我認爲它的休息時間;)

回答

2

提示:

添加斷言(r是正的,非零?,低於maxsizemaxsize非零等)

編寫測試對於這個函數,從一個簡單的數組開始,然後向上。不要把它們扔掉 - 把它們寫下來並連續運行。

給變量指定明確的名稱。

請勿重複使用r

你的代碼對我來說看起來有點太晦澀。乍一看,它正在哭「在這裏發生一次錯誤!快來看看!」。斷言每一個可能的邊界錯誤。

對於任何更詳細的答案,你應該擴大一點「它仍然沒有出來右」