Use std::transform
for that.
std::transform(vec1.begin(), vec1.end(), std::back_inserter(vec2),
[](const MyClass& cls) { return cls.a; });
(If you can't use C++11, you could make 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, do a .reserve()
to prevent unnecessary reallocation during the copy.
vec2.reserve(vec1.size());
std::transform(...);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…