Обход вектора в обратном направлении

Мне нужно перебрать вектор от конца до начала. «Правильный» способ -

for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
    //do Something
}

. Когда doSomething требует знания фактического индекса, тогда для его получения необходимо выполнить некоторые вычисления с помощью rit, например index = v.size () - 1 - (rit - v.rbegin )

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

for(int i = v.size() - 1; i >= 0; --i)
{
    //do something with v[i] and i; 
}

Это дает предупреждение о том, что i подписан и v.size () без знака. Переход на

for (unsigned i = v.size () - 1; i> = 0; --i) просто функционально неверен, потому что это, по сути, бесконечный цикл :)

Какой эстетически хороший способ делать то, что я хочу делать,

  • без предупреждений
  • не требует приведения
  • не слишком многословен

Надеюсь, я не ищу чего-то, что не требует? существует:)

33
задан James Webster 30 August 2013 в 14:34
поделиться