Как вы перебираете в обратном направлении по циклическому буферу без условия? - PullRequest
12 голосов
/ 09 августа 2010

Итерация вперед по циклическому буферу без использования условного оператора проста с помощью оператора остатка ...

iterator = (iterator + 1) % buffer_size;

Я не могу при жизни понять обратноеоперация, повторяющаяся в обратном направлении.

Ответы [ 2 ]

15 голосов
/ 09 августа 2010

Работает ли у вас iterator = (iterator + buffer_size - 1) % buffer_size? Иди на один меньше, чем все вокруг.

0 голосов
/ 09 августа 2010

ответ Бореалида работает.(примечание: iterator изначально установлено в 0).

Другое решение -

iterator = buffer_size - 1 - (buffer_size - iterator) % buffer_size с iterator, изначально установленным на buffer_size.

...