По умолчанию используйте вектор ... Но тогда, если это возможно, не забудьте использовать косвенное указание типа!
Причина этого в том, что если вам нужно только выполнить итерацию, то вы сможете использовать любой из доступных контейнеров STL и выбрать его один раз посредством косвенного определения типа.
Например, допустим, вы изначально выберете вектор (который является выбором по умолчанию):
typedef std::vector<MyThing> MyThingContainer ;
А затем используйте контейнер как обычно:
void foo(MyThingContainer & things)
{
for(MyThingContainer::iterator it = things.begin(),
itEnd = things.end() ;
it != itEnd ;
++it)
{
MyThing & thing = *it ;
// Do something with that thing
}
}
Таким образом, в день, когда вы найдете список, или деку, или любой другой контейнер, отличный от вектора, просто изменив typedef и перекомпилировав, вы измените истинный тип контейнера.