2013-11-14 2 views
2

Как получить доступ к следующему элементу в диапазоне, основанном на цикле, перед следующим циклом?Доступ к следующему элементу в диапазоне, основанном на цикле перед следующим циклом

Я знаю, что с помощью итеративного подхода вы делаете что-то вроде arr[++i], но как достичь такого же результата в цикле, основанном на диапазоне?

for (auto& cmd : arr) { 
    steps = nextElement; //How do I get this nextElement before the next loop? 
} 

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

+0

Возможно, вы, вероятно, будете следить за показателем самостоятельно. – chris

+0

Вы можете создать свой собственный тип, который может получить доступ к последующим элементам. – 0x499602D2

ответ

3

Если диапазон имеет смежное хранение (например, std::vector, std::array, std::basic_string или родной массив), то вы можете сделать это:

for (auto& cmd : arr) { 
    steps = *(&cmd + 1); 
} 

В противном случае, вы не можете, без внешнего переменного.

+0

Я полагаю, что можно использовать 'std :: find' без внешней переменной для ее отслеживания. Однако, если у вас есть несколько контейнеров, это может занять немного времени. – chris

+0

Это именно то, что я искал. Благодаря! – theintellects

Смежные вопросы