c++ - 如何从C++中的对象数组中获取数据成员数组?

标签 c++ arrays class mapping

假设我有一个“人”对象数组:

#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 

Live demo

更新:为了避免不必要的重新分配,您可以在调用 std::transform< 之前调用 ages.reserve(pp.size())/

关于c++ - 如何从C++中的对象数组中获取数据成员数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668508/

相关文章:

c++ - 图的平均最优路径

c++ - Dlib r_squared C2059 错误

c++ - 2 运算符重载有什么区别?

c++ - 如何检查科学记数法是否为 double C++

java - 在不是 Activity 的类中使用 Android 中的 TelephonyManager

c++ - 创建 C++ 类的新实例,结果重复

javascript - 在 JavaScript 中使用数组

javascript - 给定数组 "distribute/scale"的数量到特定值

design-patterns - "implementing an interface"到底是什么意思?

java - 有没有办法在 JVM 中找到加载的类文件?