3

arraysizeかなり単純です。ループに 1 つの var のみを使用して、配列のすべてのインデックスをループしたいと考えています。i2 つの varsとを使用してそれを行う方法がありますj。ここでi、実際のインデックスを追跡してループしj、arraysize までカウントしてループを終了します。

for (unsigned int i = start, j = 0; //start is the starting index
 j < arraysize;
 ++i == arraysize ? i = 0 : 0, ++j)
{
 //do stuff
}

only でこれを行う気の利いた方法はありiますか?なんらかの理由で後方反復が理にかなっている場合、順序は問題ではありません。

start明確化: from to arraysize - 1、次に from 0toをループしたいstart - 1

4

6 に答える 6

7

少なくとも私が理解しているように、配列全体をループしたい、最初以外の場所から開始したい場合は、最後に到達したら最初に戻って、元の出発点。

それが正しいと仮定すると、それは非常に簡単です。

for (size_t i=0; i<arraysize; i++)
    process(array[(i+start)%arraysize]);
于 2013-10-30T16:47:02.253 に答える
1
for ( i=start; i<start+arraysize; i++ ) {
    // do stuff with (i % arraysize) in place of i
}
于 2013-10-30T16:46:29.610 に答える
1
for (size_t i = start; (i + 1) % arraysize != start: i = (i + 1) % arraysize)  { 
    // stuff
}
于 2013-10-30T16:52:38.553 に答える
0

これでそこにたどり着きます:

for (unsigned int i = start; i < start + arraySize; i++)
{
    DoSomething(array[i % arraySize]);
}

または:

for (unsigned int i = 0; i < arraySize;  i++)
{
    DoSomething(array[(i + start) % arraySize]);
}
于 2013-10-30T16:50:22.717 に答える
0

たとえば、次のループステートメントを使用できます

for ( int i = start; i < arraysize + start; i++ )

そしてループ本体の中で i の代わりに式 i % arraysize を使用します

于 2013-10-30T16:53:21.123 に答える