Некоторым из вас это может показаться несерьезным, но какой из следующих двух методов итерации по контейнеру STL лучше? Почему?
class Elem;
typedef vector<Elem> ElemVec;
ElemVec elemVec;
// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
Elem& e = *i;
// Do something
}
// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
Elem& e = elemVec.at(i);
// Do something
}
Метод 0 кажется более чистым STL, но метод 1 достигает того же с меньшим количеством кода. Простая итерация по контейнеру - это то, что появляется везде в любом месте исходного кода. Итак, я склонен выбрать метод 1, который, кажется, уменьшает визуальный беспорядок и размер кода.
PS: Я знаю, что итераторы могут делать гораздо больше, чем простой индекс. Но, пожалуйста, держите ответ / обсуждение сосредоточенным на простой итерации над контейнером, как показано выше.