By default, use a vector... But then, if possible, don't forget to use a type indirection!
The reason for that is that if you only need to iterate, then you should be able to use any one of the available STL containers, and choose it once through a typedef indirection.
For example, let's say you'll initially choose a vector (which is the default choice) :
typedef std::vector<MyThing> MyThingContainer ;
And then use the container as usual :
void foo(MyThingContainer & things)
{
for(MyThingContainer::iterator it = things.begin(),
itEnd = things.end() ;
it != itEnd ;
++it)
{
MyThing & thing = *it ;
// Do something with that thing
}
}
This way, the day you find a list, or a deque, or whatever is a better container than a vector, just by changing the typedef and recompiling, you'll change the true type of the container.