Oui, vous pouvez utiliser transform
à la fois pour les baies héritées et pour les conteneurs standard tels que std::vector
.
Utilisation des tableaux anciens
person persons[2] = { { 20, "name1" }, { 21, "name2" } };
for (auto & person : persons)
cout << person.age << " " << person.name << endl;
decltype(person::age) ages[sizeof(persons)/sizeof(persons[0])];
std::transform(std::begin(persons), std::end(persons), std::begin(ages), [](person & p) -> decltype(person::age) { return p.age; });
for (auto & age : ages)
cout << age << endl;
En utilisant std::vector
std::vector<person> persons = { { 20, "name1" }, { 21, "name2" } };
for (auto & person : persons)
cout << person.age << " " << person.name << endl;
std::vector<decltype(person::age)> ages(persons.size());
std::transform(persons.begin(), persons.end(), ages.begin(), [](person & p) -> decltype(person::age) { return p.age; });
for (auto & age : ages)
cout << age << endl;
Ceci extrait dynamiquement les âges de toutes les personnes dans le récipient d'origine.
['std :: transform'] (http://fr.cppreference.com/w/cpp/algorithm/transform) pourrait être utilisé. Je ne sais pas si ce n'est pas trop accablant cependant. – nwp
Il y aura une boucle si vous êtes celui pour l'écrire ou non. – AndyG
Avec [range-v3] (https://github.com/ericniebler/range-v3): 'persons | ranges :: view :: transform (& Personne :: age) '. – Jarod42