【问题标题】:Convert from std::vector<std::vector<float>> to float**从 std::vector<std::vector<float>> 转换为 float**
【发布时间】:2023-03-23 14:25:01
【问题描述】:

有一个函数接受float** 参数。 我在std::vector&lt;std::vector&lt;float&gt;&gt; 类型的变量中有值。

是否可以在不分配临时float*[] 的情况下进行这样的转换?

【问题讨论】:

  • 是的。你试过什么?这只是分配内存然后使用 2 个 for 循环并遍历两个向量的问题。

标签: c++ vector


【解决方案1】:

不是直接的,但您不必从“内部”向量中复制数据。相反,您可以创建一个指向每个内部向量的 data() 属性的指针数组。

【讨论】:

    【解决方案2】:

    这将起作用:

    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&lt;&gt;s,但您需要重新创建外部。 std::vector&lt;&gt; 保证其成员的线性存储(意味着它与 C 数组兼容),因此它适用于内部向量。

    【讨论】:

    • 为什么不使用std::vector 代替target
    • @avakar 你是对的,你也应该使用 std::vector 作为目标
    • 观察边缘情况 - 如果任何内部向量为空,则 &amp;*source[i].begin() 具有未定义的行为。但是由于该函数很可能需要float**,因此它很可能需要矩形数据,因此希望这就是提问者所拥有的。
    【解决方案3】:

    您必须手动进行转换,通过使用两个循环将 vector&lt;vector&lt;float&gt; &gt; 的值填充到您的 float**

    无论如何,您都必须分配内部float*

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2021-09-03
      • 2017-11-03
      • 2019-04-23
      • 1970-01-01
      相关资源
      最近更新 更多