gpt4 book ai didi

c++ - 使用 std::copy 将一个结构的数组转换为另一个结构的 Vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:06 25 4
gpt4 key购买 nike

我想使用 std::copy 将一个类 (B)(C 遗留接口(interface))的数组复制到另一个类 (A) 的 vector 中。这工作正常,当 A 提供带有参数 B 的构造函数时,请参见以下代码:

#include <algorithm>
#include <vector>

struct B
{
};

struct A
{
A(){}

#if 1
A(const B& b)
{
// constructor converting B into A
}
#endif
};

A toA(const B& b)
{
A rc;
//free function converting B into A
return rc;
}


int main()
{
std::vector<A> VecA;
B* arrayB;
size_t elementsOfB;

//here fill array B and elmentsOfB in C legacy code - does not matter for minimum example

//now copy array of B into vector of A
std::copy(arrayB, arrayB + elementsOfB, std::back_inserter(VecA));

return 0;
}

该示例也可作为 Live Example 使用。 .

我想删除转换构造函数,而是想使用自由函数“toA”。当然,这不会编译(在 A 的结构定义中尝试“#if 0”),因为 std::copy 希望有一个直接函数来执行此操作。

有什么方法可以将 std::copy 与免费功能一起使用吗?

最佳答案

顾名思义,std::copy 用于将对象从一个地方复制到另一个地方。这就是它不提供转换接口(interface)的原因。

当需要从一种类型转换为另一种类型时,std::transform应该使用。这允许您提供一元操作来实现从一种类型的对象到另一种类型的转换:

std::transform(arrayB, arrayB + elementsOfB, std::back_inserter(VecA), toA);

Working example :

#include <algorithm>
#include <vector>
#include <iostream>

struct B {};
struct A {};

A toA(const B&) {
std::cout << "B ==> A\n";
return A();
}

int main()
{
std::vector<A> vecA;
B arrayB[10];
std::transform(arrayB, arrayB + 10, std::back_inserter(vecA), toA);
}

关于c++ - 使用 std::copy 将一个结构的数组转换为另一个结构的 Vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927622/

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