gpt4 book ai didi

c++ - 有什么快速的方法可以将 std::vector> 转换为 std::vector

转载 作者:行者123 更新时间:2023-11-30 02:21:27 26 4
gpt4 key购买 nike

我想转换 std::vector<std::vector<float>>进入std::vector<float2> .直接的方式是这样的:

std::vector<std::vector<float>> pts;
std::vector<float> p1{1.,2.};
std::vector<float> p2{2.,3.};
pts.push_back(p1);
pts.push_back(p2);
std::vector<float2> lattice;
for (auto p : pts){
p_ = make_float2(p[0],p[1]);
lattice.push_back(p_);
}

在这里float2是cuda vector 类型,它是这样定义的(不是100%确定):

struct __device_builtin__ __align__(8) float2
{
float x, y ;
};

还有什么快速的方法吗?

最佳答案

您可以做几件事。 1 是使用一种类型,这意味着您知道总会有 2 个元素,例如:

std::vector<std::array<float, 2>>

std::vector<std::pair<float, float>>

这意味着您无需在为安全代码创建每个点之前检查内部 vector 的大小是否正确。

其次,在开始之前在点阵 vector 中保留适当的空间量 emplacing back ,这意味着您永远不必调整大小,也不会浪费时间复制:

std::vector<float2> lattice;
lattice.reserve(pts.size());
for (auto p : pts){
lattice.emplace_back(make_float2(p[0],p[1]));
}

注意,这需要float2 结构支持移动(它将基于提供的定义)。

如果您对这两种方法进行测试 as done here.你会发现你可以大大减少所需的时间。在链接的示例中,超过 10000 个点,时间大约是原始时间的 1/5,我建议进行更改。

关于c++ - 有什么快速的方法可以将 std::vector<std::vector<float>> 转换为 std::vector<float2>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292532/

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