Итерировать или использовать счетчик, вот в чем вопрос - PullRequest
4 голосов
/ 06 декабря 2009

Когда кто-то начинает использовать STL и у него есть вектор, вы обычно видите:

vector<int> vec ;

//... code ...

for( vector<int>::iterator iter = vec.begin() ;
     iter != vec.end() ;
     ++iter )
{
  // do stuff
}

Я просто нахожу весь этот синтаксис vector<int>::iterator больным. Я знаю, что вы можете typedef vector<int>::iterator VecIterInt, и что немного лучше ..

Но вопрос в том, что не так с добрым старым:

for( int i = 0 ; i < vec.size() ; i++ )
{
  // code
}

Ответы [ 12 ]

0 голосов
/ 07 декабря 2009

Всегда в раздумьях об этом. Для компьютера это не имеет значения, компилятор достаточно велик, чтобы заботиться о себе, и в конечном итоге будет генерировать одинаково хороший код для любого случая.

А как же программист?

Видя for(int i=0;i<blah.size();i++) мой глаз сразу же читает это как "зацикливание на всех элементах".
Во время просмотра:

typedef std::vector<int> MyIndexes; 
MyIndexes indexes;
for (Something::iterator iter = indexes.begin(); iter != indexes.end(); ++iter);

Я должен внимательно прочитать каждую строку, чтобы убедиться, что вы не делаете что-то хитрое.

С другой стороны, просмотр цикла for () заставляет меня беспокоиться о том, что код написан программистом C, который ничего не знает о STL и будет ужасно спроектирован.

0 голосов
/ 07 декабря 2009

Лично я предпочитаю использовать итератор для итерации . Показывает намерение лучше, чем доступ по индексу, IMHO, и идиома кодирования одинакова для разных контейнеров.

...