【发布时间】:2023-03-23 14:25:01
【问题描述】:
有一个函数接受float** 参数。
我在std::vector<std::vector<float>> 类型的变量中有值。
是否可以在不分配临时float*[] 的情况下进行这样的转换?
【问题讨论】:
-
是的。你试过什么?这只是分配内存然后使用 2 个 for 循环并遍历两个向量的问题。
有一个函数接受float** 参数。
我在std::vector<std::vector<float>> 类型的变量中有值。
是否可以在不分配临时float*[] 的情况下进行这样的转换?
【问题讨论】:
不是直接的,但您不必从“内部”向量中复制数据。相反,您可以创建一个指向每个内部向量的 data() 属性的指针数组。
【讨论】:
这将起作用:
std::vector<std::vector<float>> source;
std::vector<float*> target(source.size());
for (int i = 0; i < source.size(); ++i)
target[i] = &*source[i].begin();
如您所见,您不需要复制内部std::vector<>s,但您需要重新创建外部。 std::vector<> 保证其成员的线性存储(意味着它与 C 数组兼容),因此它适用于内部向量。
【讨论】:
std::vector 代替target?
&*source[i].begin() 具有未定义的行为。但是由于该函数很可能需要float**,因此它很可能需要矩形数据,因此希望这就是提问者所拥有的。
您必须手动进行转换,通过使用两个循环将 vector<vector<float> > 的值填充到您的 float**。
无论如何,您都必须分配内部float*。
【讨论】: