Последний элемент в ForEach - PullRequest
2 голосов
/ 16 марта 2012

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

Ответы [ 3 ]

7 голосов
/ 16 марта 2012

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

4 голосов
/ 16 марта 2012

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

3 голосов
/ 16 марта 2012

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

Примерно так:

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
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...