C++将包含对象的向量转换为包含双精度的向量
C++ convert vector containing objects to vector containing doubles
我有一个包含对象的向量:
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>
包含每个对象的双值,如下所示:
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(); });
实时演示
如果您的编译器不支持C++14通用lambdas,请更改为:
std::transform(v.begin(), v.end(), dv.begin(), [](Foo const &f) { return f.getVal(); });
试试这个,但要使用您的对象:
std::vector<int> ivec({1,2,3,4,5,6,7,8,9});
std::vector<double> dvec;
for(auto&& x : ivec)
dvec.push_back(double(x));
所以在你的情况下:
std::vector<myObjectType> myObjectVector {...}
std::vector<double> myDoubleVector;
for(auto&& x : myObjectVector)
myDoubleVector.push_back(x.get_value());
我知道这不是你想要的,但我自己做了一个小实验:
#include <iostream>
#include <vector>
class Foo {
public:
double value;
Foo(double v) :
value{ v } {}
operator double() {
return value;
}
};
int main(int argc, char* argv[]) {
std::vector<Foo> foos{ 1.0, 3.0, 4.0, 7.0 };
for(double d : foos) {
std::cout << d << ", ";
}
}
它奏效了。我不知道你的情况,但正如我上面所展示的,你甚至可能不需要将你的对象向量转换为二重向量。
相关文章:
- 在C++中,如何创建包含可变模板对象的异构向量?
- 包含指向其他结构的指针向量的结构
- 在 C++ 向量构造中包含迭代器
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 如何删除包含其他向量的向量?
- boost::interprocess::managed_mapped_file 如何包含弹性向量?
- 如果字符串向量包含字符'p',如何检查 c++
- C++11 向量包含 2 个不同的子类,但不能同时进行
- 如何将智能指针向量转换为常量向量,该常量向量包含指向常量的智能指针
- 在redis中存储chars的向量 - 包含nul
- 如何创建一个接受向量的类,该向量包含任何类型的数据
- 如果向量包含重复项,则此函数应返回 true。知道为什么它不起作用吗?
- 访问作为指向该类的指针向量包含的类的方法
- 在Vector中,一个向量包含8000个成员
- 如果向量a包含与向量b相同的元素,我如何有效地检查
- 类的向量包含函数
- 填充到一个向量中,该向量包含指向列表的指针
- 向量包含结构的排序