Последний элемент в ForEach

Есть ли в C ++ встроенный метод для определения того, на каком элементе вы находитесь в цикле foreach, или есть ли способ определить, используете ли вы последний элемент? Или я должен сделать это вручную со счетчиком?

 svick16 мар. 2012 г., 00:24
Зачем тебе это знать?
 Justin Peel16 мар. 2012 г., 00:02
Если вам нужно знать индекс каждого элемента (или любого элемента), вы должны просто использовать цикл for.

Ответы на вопрос(2)

как насчет использования другого итератора для его сохранения до перехода к следующему элементу в контейнере? Если вы установите оба в начало и затем в конце цикла, прежде чем получите следующий элемент (увеличьте или уменьшите итератор), установите последний итератор на текущий, а затем получите следующий.

Что-то вроде этого:

container current::iterator;
container last::iterator;
current = container.first();
last = current;  // or contianer.first();
while ( current is valid ) 
{
  // do something 
  last = current;
  // get the next item 
  current = container.next(); // or current++; 
                              // depending upon container or 
                              // iterator
}

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

 Martin York16 мар. 2012 г., 00:24
Просто вставьте в код четыре пробела (для этого есть кнопка{})
 Glenn16 мар. 2012 г., 00:51
Спасибо. Немного ржавый на моем редактировании.
Решение Вопроса

такого встроенного способа нет. Не может быть и для итераторов в целом, потому что итераторы не обязаны знать, что они «почти» в конце.

 Jon16 мар. 2012 г., 00:02
Ах я вижу. Спасибо :)
 Ben Voigt19 мар. 2012 г., 16:57
Для большинства итераторов это довольно просто:if (it + 1 == end)

Ваш ответ на вопрос