8

我有兴趣以这样一种方式迭代列表,即我可以从任何位置开始并通过一直到末尾来遍历整个列表,然后循环回到开头并迭代到起始位置。

假设我想为保证 4 个元素的数组执行此操作: char array[4] = {'a', 'b', 'c', 'd'}

我很难构建一个 for 循环,以便我可以从“a”开始,循环 abcd,或者从“b”开始,循环 bcda,或者从 d 开始,循环 dabc,等等。

我认为 for 循环的初始部分类似于 i = startingPosition。

我认为 for 循环的增量部分类似于 i = (i+1) % 4。这样,例如,从索引 2 开始,将上升到 3,然后是 0,然后是 1,等等。

中间的“终止”条件应该是什么?

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

谢谢!

4

2 回答 2

18

对循环控制使用正常迭代,然后以大小为模调整索引:

for (i = 0; i < size; i++) {
    int index = (i + startingPosition) % size;
    // Do stuff with array[index]
}
于 2013-10-25T23:40:04.310 回答
4
i = startingPosition;
do
{
    // use 'i' here
    i = (i + 1) % size;
} while (i != startingPosition);
于 2013-10-25T23:42:48.947 回答