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