gpt4 book ai didi

C++ 将包含对象的 vector 转换为包含 double 的 vector

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:03 24 4
gpt4 key购买 nike

我有一个包含对象的 vector :

std::vector<myObjectType> myObjectVector;

myObjectType包含一个名为 value 的双重成员变量,我可以通过两种方式检索:

myObjectType aObject;
double aObjectDouble = aObject(); // possibility 1 (overloaded operator)
double aObjectDouble = aObject.get_value(); // possibility 2

现在我可以转换 std::vector<myObjectType> myObjectVector进入std::vector<double> myObjectVectorDoubles , 其中std::vector<double>包含每个对象的 double 值,如下所示:

std::vector<double> myObjectVectorDoubles;
myObjectVectorDoubles.push_back(myObjectVector[0].get_value());
myObjectVectorDoubles.push_back(myObjectVector[1].get_value());
...
...

或者只是这样

std::vector<double> myObjectVectorDoubles;
myObjectVectorDoubles.push_back(myObjectVector[0]());
myObjectVectorDoubles.push_back(myObjectVector[1]());
...
...

我可以将它放在 for 循环中,但这是最干净(或最有效)的解决方案吗?

最佳答案

您可以使用 std::transform。例如,如果您有一个 class

class Foo {
double val;
public:
Foo() = default;
Foo(double const val_) : val(val_) {}
double getVal() const { return val; }
};

在你的程序中做:

std::vector<Foo> v {{1.2}, {2.3}, {5.6}};  
std::vector<double> dv(v.size());
std::transform(v.begin(), v.end(), dv.begin(), [](auto const &f) { return f.getVal(); });

Live Demo

如果您的编译器不支持 C++14 通用 lambda,请更改为:

std::transform(v.begin(), v.end(), dv.begin(), [](Foo const &f) { return f.getVal(); });

关于C++ 将包含对象的 vector 转换为包含 double 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com