Мне нужно перебрать вектор с конца на начальный. "Правильный" способ -
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)
является просто функционально неправильным, потому что это по существу бесконечный цикл :)
Что такое эстетически хороший способ сделать то, что я хочу сделать, что
- без предупреждения
- не включает трансляции
- не слишком многословный
Надеюсь, я не ищу чего-то, чего не существует:)