1
我正試圖在圓形陣列中實現「環繞」效果。當我將物品推到前面時,我希望它存儲在減少的位置。當我推到前面,我想是這樣的:C++模數運算符圓形陣列
items[front] = ch;
front = (front - 1) % capacity;
但這並不環繞像我期望的那樣。正面從0開始,當第二行執行時,正面變爲-1。第二行執行後不應該變成6嗎?我的數據結構教科書似乎是這樣想的。
我正試圖在圓形陣列中實現「環繞」效果。當我將物品推到前面時,我希望它存儲在減少的位置。當我推到前面,我想是這樣的:C++模數運算符圓形陣列
items[front] = ch;
front = (front - 1) % capacity;
但這並不環繞像我期望的那樣。正面從0開始,當第二行執行時,正面變爲-1。第二行執行後不應該變成6嗎?我的數據結構教科書似乎是這樣想的。
這就是%
在C++中的工作原理。爲了得到你想要的效果,試試這個:
front = (front + capacity - 1) % capacity;
'front =(front> 0?front:capacity) - 1;'聽起來對我更好。另外,如果'front'是一個'unsigned'類型,那麼OP的操作也應該是正確的。 – Chnossos
你能給我們更多的上下文代碼嗎?什麼數據類型是「前」? 「容量」的價值是什麼? – user3288829
如果'front'不是'unsigned'類型,那麼這種行爲是完全正常的。 – Chnossos
尤其是pre-C++ 11,注意http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values – chris