Вам действительно нужен диапазон, а не просто начать итератор. Обратите внимание, что вы не можете сравнивать итераторы из разных контейнеров, поэтому лучше выбирать диапазон, а не итератор. Вы можете использовать Boost.Range для достижения этого:
#include <boost/range.hpp>
#include <boost/foreach.hpp>
boost::iterator_range< container::iterator > r;
switch( e )
{
case Container1:
r = boost::make_iterator_range( vecContainer1 );
break;
case Container2:
r = boost::make_iterator_range( vecContainer2 );
break;
...
}
BOOST_FOREACH( container::value_type value, r )
{
...
}