Что касается вашего второго пункта, идиоматический способ C ++ - это вовсе не цикл, а использование алгоритмов (если это возможно).
Ручной цикл для вывода:
for (std::vector<std::string>::iterator it = vec.begin(); it != end(); ++it)
{
std::cout << *it << "\n";
}
Алгоритм:
std::copy(vec.begin(), vec.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
Ручной цикл для вызова функции-члена:
for (std::vector<Drawable*>::iterator it = vec.begin(); it != end(); ++it)
{
(*it)->draw();
}
Алгоритм:
std::for_each(vec.begin(), vec.end(), std::mem_fun(&Drawable::draw));
Надеюсь, это поможет.