c++ - 二维 vector 错误-C++

标签 c++ vector

我是 C++ vector 编程的新手。我想初始化未知大小的二维矩阵,所以我来到了 vector 端。我有两个文件 1) .h 和 2).cpp。在 .h 文件中,我像这样初始化了 vector

vector<vector<double> > vector_stor;

然后在 .cpp 中从另一个来源获取每个维度的大小后,我像这样重新调整 vector 的大小

size_X=5; //assumption
size_Y=5; //assumption    
vector_stor.resize(size_X);
for(int i=0;i<size_X;i++)
vector_stor[i].resize(size_Y);

现在我想存储来自 .mat 文件的数据,最初由 matIO 库读取,使用像这样的 Mat_VarRead 函数

Mat_VarReadData(vector_stor); //there are other arguments also but for demo just assume it

Mat_VarReadData 在 void* 数据中进行争论,我有 2D vector 。当我这样做时它给出错误

Error 1 error C2664: 'Mat_VarReadData' : cannot convert parameter from 'std::vector<_Ty>' to 'void *'

谁能指导我如何做到这一点?这对我很有帮助。

编辑部分:

  matvar = Mat_VarReadInfo(mat,"data_struct");
    field=Mat_VarGetStructFieldByName(matvar,"vect_stor",0);
    int    start[2]={0,0};
    int    stride[2]={1,1};
    int    edge[2];
           edge[0]=field->dims[0];
           edge[1]=field->dims[1];
    Mat_VarReadData(mat,field,vector_stor,start,stride,edge);

其中 vector_stor 是我正在寻求帮助的变量。

谢谢

最佳答案

检查您对 Mat_VarReadData 的输入顺序。该函数需要类似于

Mat_VarReadData( ..., vector<vector<double> > mat, ... )

并且您需要排列您的输入,以便 vector_stor 与该输入排列。

如果我有这个功能:

foo(int a, double b);

然后当我调用 foo 时,第一个参数需要是 int,第二个参数是 double。同样,您需要将您的输入类型与您实际尝试传递的内容相匹配。

另请查看: http://libmatio.sourcearchive.com/documentation/1.3.3/group__MAT_g1845000f4fc6252ec5ff11c4b9f0759f.html

看起来该函数会将数据转储到一维数组中,而不是 vector 的 vector 中。试试这个:

std::vector<double> mat;
mat.resize(size_X*size_Y);
// call Mat_VarReadData with &mat[0] as your void*
// now you can index with 
mat[i*size_Y + j];

假设矩阵是 MATLAB 从内存中使用的列主要形式。如果它使用 row major,则需要使用

进行索引
mat[i + j*size_X];

编辑:如果您对为什么 &mat[0]mat.data() 感到好奇(第二个需要 C++11,谢谢指出out) 有效是因为 std::vector 保证是连续的,见 Are std::vector elements guaranteed to be contiguous?

关于c++ - 二维 vector 错误-C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649262/

相关文章:

c++ - 使用 Xinput2 获取双 RawKeyPress 事件

python - 从python向量中随机选取两个大于零的值

r - 在 R 中编写二次函数

带有对象填充的 Java JTable vector

c++ - 使用 lambda 的线程构建 block (TBB) 排队任务

c++ - 为什么隐式转换对于非原始类型不模棱两可?

java - 如何输出存储在java vector 中的对象的属性?

scala - 在scala中使用map和reduce进行矢量积

c++ - getAffineTransform-opencv

c++ - 构造函数 SFINAE 和继承在 clang 中失败