我目前正在使用一小段代码,我想获取一个向量的每个值并调用一个包装类并放入一个新的向量。
vector<MyClass> input;
vector<WrapperClass> output;
output.reserve(input.size());
for (auto& myclass: input) {
output.emplace_back(WrapperClass(myclass));
}
我知道上述内容并非明显可读性,但可能如下所示:
vector<WrapperClass> output(input.begin(), input.end(), WrapperAllocator)
我不太清楚分配器应该做什么以及因为我不熟悉&#34; C ++概念&#34;很多文档都在我的头上。也许这是错误的用例,但问题真的归结为;
是否可以在数据从一个容器传递到另一个容器时对其进行转换?如果可能的话,该如何处理?
答案 0 :(得分:2)
是否有可能在数据从一个容器传递到另一个容器时对其进行转换?
如果您的WrapperClass
包含MyClass
的构造函数,则可以直接从范围创建另一个向量,并在该构造函数中转换数据,例如:
#include <iostream>
#include <vector>
struct MyClass
{
int x;
MyClass(int x) : x{ x } {}
};
struct WrapperClass
{
int x;
WrapperClass(MyClass const &mc)
{
x = mc.x + 10;
}
};
int main()
{
std::vector<MyClass> v1 = { 1,2,3,4 };
std::vector<WrapperClass> v2(v1.begin(), v1.end());
//test
for (auto wc : v2)
std::cout << wc.x << std::endl;
return 0;
}
11
12
13
14
答案 1 :(得分:0)
您可以使用std::transform
和std::back_inserter
:
std::transform( input.begin(), input.end(), std::back_inserter( output ),
[]( const MyClass& c ){ return WrapperClass(c); } );