std::vector<int> ivect;
std::transform(foovect.begin(), foovect.end(), std::back_inserter(ivect),
[](Foo const& f) -> int { return f.bar; });
Если вам не хватает лямбда-поддержки, конечно, вам придется создать функтор, чтобы сделать то же самое.Boost.Bind отлично подойдет для этого.
^^^ Не понял вопроса.Сделайте это:
int * array = new int[foos.size() * 3]; // of course, using this datatype is dumb.
int counter = 0;
std::for_each(foos.begin(), foos.end(), [=array,&counter](Foo const& f)
{
for (int i = 0; i < 3; ++i) array[counter++] = f.bar[i];
});