C++ vector<vector<double>> 加倍 **

标签 c++ pointers vector

我正在尝试传递类型为 vector<vector<double> > 的变量到函数 F(double ** mat, int m, int n) . F 函数来自另一个库,所以我无法更改它。有人可以给我一些提示吗?谢谢。

最佳答案

vector<vector<double>>double**是完全不同的类型。但是可以借助另一个存储一些双指针的 vector 来提供这个函数:

#include <vector>

void your_function(double** mat, int m, int n) {}

int main() {
    std::vector<std::vector<double>> thing = ...;
    std::vector<double*> ptrs;
    for (auto& vec : thing) {
        //   ^ very important to avoid `vec` being
        // a temporary copy of a `thing` element.
        ptrs.push_back(vec.data());
    }
    your_function(ptrs.data(), thing.size(), thing[0].size());
}

这样做的原因之一是因为 std::vector保证所有元素都连续存储在内存中。

如果可能,请考虑更改函数的签名。通常,矩阵在内存中线性排列。这意味着,访问矩阵元素可以通过一些基指针 p 来完成。类型 double*对于左上角的系数和一些基于行和列的计算线性索引,如 p[row*row_step+col*col_step]其中 row_stepcol_step是布局相关的偏移量。标准库并没有真正为这些类型的数据结构提供任何帮助。但是您可以尝试使用 Boost 的 multi_array或 GSL 的 multi_span来帮助解决这个问题。

关于C++ vector<vector<double>> 加倍 **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776164/

相关文章:

c++ - 用特定分布的非均匀屏幕点填充 vector

c - 如何使用函数将结构指针设置为 NULL

c++ - C++11 和 Boost.Container 下 vector::resize(size_type n) 的这种行为是否正确?

C++知识产权保护/反逆向

c++运算符在数组指针上重载<<

C指针不起作用

C 用指针参数定义函数指针

c++ - 获取元素在 vector 中位置的索引

c++ - 使用自定义增量迭代二维 vector

c++ - 显示不在模态模式下的对话框