假设我有一个“人”对象数组:
#include <iostream>
class person{
public:
int age;
std::string name;
};
是否可以得到一个与每个人的年龄(或姓名)相同大小的数组?我知道如何用循环来做到这一点,但我希望有某种“ map ”可以让我在一行中得到同样的结果。
最佳答案
以下是如何使用 std::transform
来完成此操作, std::back_inserter
,和一个 lambda:
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
struct person{
int age;
std::string name;
};
int main()
{
std::vector<person> pp = {{16, "Bob"},{32, "Alice"}};
std::vector<int> ages;
std::transform(
pp.begin(),
pp.end(),
std::back_inserter(ages),
[](const person& p) -> int { return p.age; });
for(auto v: ages)
std::cout << v << " ";
}
输出:
16 32
更新:为了避免不必要的重新分配,您可以在调用 std::transform< 之前调用
ages.reserve(pp.size())
/
关于c++ - 如何从C++中的对象数组中获取数据成员数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668508/