sta*_*ker 9 c++ pointers vector
我正在尝试将类型的变量传递vector<vector<double> >给函数F(double ** mat, int m, int n).F函数来自另一个lib,所以我无法更改它.有人可以给我一些暗示吗?谢谢.
sel*_*tze 15
vector<vector<double>>并且double**是完全不同的类型.但是有可能在另一个存储一些双指针的向量的帮助下提供这个函数:
#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());
}
Run Code Online (Sandbox Code Playgroud)
其中一个原因是std::vector保证所有元素都连续存储在内存中.
如果可能,请考虑更改功能的签名.通常,矩阵在内存中线性排列.这意味着,访问矩阵元素可以使用针对左上系数的一些p类型的基指针double*和基于行和列的一些计算的线性索引来完成,例如p[row*row_step+col*col_step]在哪里row_step并且col_step是与布局相关的偏移.标准库并没有真正为这些类型的数据结构提供任何帮助.但你可以尝试使用Boost multi_array或GSL multi_span来帮助解决这个问题.