#include <iostream>
#include <vector>
#include <algorithm>
struct A
{
int x;
double y;
};
template <typename T, typename U>
auto extract(const std::vector<T>& vec, U T::* member)
{
std::vector<U> result;
result.reserve(vec.size());
std::transform(
std::begin(vec), std::end(vec), std::back_inserter(result),
[member] (const T& val) { return val.*member; }
);
return result;
}
int main() {
std::vector<A> as{{10, 3.14}, {42, 1.618}};
auto result = extract(as, &A::x);
for (auto x : result)
std::cout << x << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IEEKewoJaW50IHg7Cglkb3VibGUgeTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgphdXRvIGV4dHJhY3QoY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIHZlYywgVSBUOjoqIG1lbWJlcikKewoJc3RkOjp2ZWN0b3I8VT4gcmVzdWx0OwoJcmVzdWx0LnJlc2VydmUodmVjLnNpemUoKSk7CglzdGQ6OnRyYW5zZm9ybSgKCQlzdGQ6OmJlZ2luKHZlYyksIHN0ZDo6ZW5kKHZlYyksIHN0ZDo6YmFja19pbnNlcnRlcihyZXN1bHQpLAoJCVttZW1iZXJdIChjb25zdCBUJiB2YWwpIHsgcmV0dXJuIHZhbC4qbWVtYmVyOyB9CgkpOwoJcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxBPiBhc3t7MTAsIDMuMTR9LCB7NDIsIDEuNjE4fX07CglhdXRvIHJlc3VsdCA9IGV4dHJhY3QoYXMsICZBOjp4KTsKCWZvciAoYXV0byB4IDogcmVzdWx0KQoJCXN0ZDo6Y291dCA8PCB4IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9