Use std::transform for this.
std::transform(vec1.begin(), vec1.end(), std::back_inserter(vec2), [](const MyClass& cls) { return cls.a; });
(If you cannot use C ++ 11, you can create a function object yourself:
struct AGetter { int operator()(const MyClass& cls) const { return cls.a; } }; std::transform(vec1.begin(), vec1.end(), std::back_inserter(vec2), AGetter());
or use std::tr1::bind if you can use TR1:
std::transform(vec1.begin(), vec1.end(), std::back_inserter(vec2), std::tr1::bind(&MyClass::a, std::tr1::placeholders::_1));
BTW, as @Nawaz commented below, execute .reserve() to prevent unnecessary redistribution during copying.
vec2.reserve(vec1.size()); std::transform(...);
kennytm
source share