2013-10-25 3 views
6

Меня интересует итерация в списке таким образом, что я могу начать в любом положении и перебирать весь список, поднимаясь до конца, а затем возвращаясь к началу и итерации до начальной позиции.«Циркуляр» для цикла в C

Давайте говорить, что я хочу сделать это для массива, который гарантированно 4 элемента: массив символов [4] = { 'а', 'б', 'с', 'd'}

I у меня возникли трудности с построением цикла цикла, так что я могу начинать с «a», и цикл abcd, или начинать с «b», и цикл bcda, или начинать с d, и цикл dabc и т. д.

Я думаю начальная часть цикла for будет похожа на i = startPosition.

Я думаю, что приращение части цикла for будет чем-то вроде i = (i + 1)% 4. Таким образом, начиная с индекса 2, например, до 3, затем 0, затем 1, и т. д.

Какое должно быть среднее условие окончания?

for(i = startingPosition; ???; i = (i+1)%4) 

Спасибо!

+0

Как хвост-голова для кольцевого буфера? *** [смотрите здесь] (http://stackoverflow.com/questions/3882343/suggestions-for-concise-index-handling-in-circular-buffer) *** – ryyker

ответ

15

использовать обычные итерации для управления с обратной связью, а затем отрегулировать индекс по модулю размера:

for (i = 0; i < size; i++) { 
    int index = (i + startingPosition) % size; 
    // Do stuff with array[index] 
} 
+0

Ницца! Это настолько заманчиво выяснить что-то «умное», но это удобно отделяет две проблемы. –

4
i = startingPosition; 
do 
{ 
    // use 'i' here 
    i = (i + 1) % size; 
} while (i != startingPosition); 
Смежные вопросы