2014-05-04 51 views
1

我正試圖在圓形陣列中實現「環繞」效果。當我將物品推到前面時,我希望它存儲在減少的位置。當我推到前面,我想是這樣的:C++模數運算符圓形陣列

items[front] = ch; 
front = (front - 1) % capacity; 

但這並不環繞像我期望的那樣。正面從0開始,當第二行執行時,正面變爲-1。第二行執行後不應該變成6嗎?我的數據結構教科書似乎是這樣想的。

+0

你能給我們更多的上下文代碼嗎?什麼數據類型是「前」? 「容量」的價值是什麼? – user3288829

+2

如果'front'不是'unsigned'類型,那麼這種行爲是完全正常的。 – Chnossos

+0

尤其是pre-C++ 11,注意http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values – chris

回答

3

這就是%在C++中的工作原理。爲了得到你想要的效果,試試這個:

front = (front + capacity - 1) % capacity; 
+1

'front =(front> 0?front:capacity) - 1;'聽起來對我更好。另外,如果'front'是一個'unsigned'類型,那麼OP的操作也應該是正確的。 – Chnossos