2014-05-04 50 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