因此,我正在创建一个表示任意大小矩阵的类,并且我想编写一个将内部 Vector“导出”到二维数组的函数。
我找到了 some code这似乎做我想做的。这是代码在我的类(class)中的样子:
// Export matrix to array
double** Matrix::a_data() const
{
vector<double*> ptrs;
for (auto& vec : mat)
{
ptrs.push_back(vec.data());
}
return ptrs.data();
}
其中mat 是 vector < vector < double >> 用于存储矩阵的条目。
有问题的帖子指出 vec 需要是 auto& 而不是 auto 因为“防止 vec 成为临时拷贝非常重要”。
但是,在 Visual Studio 中,我总是收到错误“没有重载函数 push_back 的实例与参数列表匹配......参数类型是 (const double*)”
所以,我的问题是,如何在不将 auto& 更改为 auto 的情况下让它工作?另外,如何将其扩展到 3 个维度?
最佳答案
您遇到了 const
问题。
假设mat
类型为 std::vector<std::vector<double>>
, vec
将是 std::vector<double> const&
类型在函数中。 data()
const
的成员函数对象返回 const*
,不是常规指针。
因此,您需要使用:
vector<double const*> ptrs;
但是,使用
return ptrs.data();
会导致更大的问题。 ptrs
是函数局部变量。当函数返回时它将被销毁。因此,返回的指针将是一个悬挂指针。
克服该问题的选项。
- 将返回类型更改为
std::vector<double const*>
. - 创建
double const**
的动态数组并归还。
我强烈推荐第一个选项。
关于c++ - 矩阵类 : "No instance of overloaded function push_back matches the argument list",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310869/