Итерация вперед через циклический буфер без использования условного оператора легко выполняется с оператором остатка...
iterator = (iterator + 1) % buffer_size;
Я не могу на всю жизнь понять обратную операцию, итерацию назад.
Итерация вперед через циклический буфер без использования условного оператора легко выполняется с оператором остатка...
iterator = (iterator + 1) % buffer_size;
Я не могу на всю жизнь понять обратную операцию, итерацию назад.
iterator = (iterator + buffer_size - 1) % buffer_size
вам подходит? Пройдите на один меньше, чем все вокруг.
Ответ Borealid работает. (примечание: iterator
изначально установлено на 0).
Другое решение
iterator = buffer_size - 1 - (buffer_size - iterator) % buffer_size
с iterator
изначально установленным на buffer_size
.
buffer_size - (iterator + 1) % buffer_size - 1
? - person Anycorn   schedule 09.08.2010