我正在使用 MEX 将我的 C++ 代码与 MATLAB 接口。我的 C++ 代码要求输出类型为 vector 。由于我是 C++ 新手,我对指针的工作方式非常困惑。我将从 MATLAB 获取一个输入数组
int *data_array_ptr
data_array_ptr=(int *)mxGetData(prhs[0]);
a = mxGetM(prhs[0]);
int int_data[a];
copy(*data_array_ptr, *data_array_ptr+ a, int_data);
现在,int_data 应该包含存储在 data_array_ptr 位置的所有数据......它这样做了吗?
然后,
double *data_out_ptr;
plhs[0]= mxCreateDoubleMatrix( (mwSize)m, (mwSize)n, mxREAL);
data_out_ptr= mxGetPr(plhs[0]);
len6=mxGetM(plhs[0]);
vector<double> data_out_data(*data_out_ptr,*data_out_ptr+len6);
这应该将空输出矩阵的内容放入名为 data_out_data 的向量中。它这样做吗?
然后,我想将 data_out_data 和 int_data 都传递给 c++ 函数。但是,我想将 data_out_data 作为指针传递,以便 c++ 函数将用数据填充向量,然后当函数完成时,MEX 函数将看到现在填充的向量并能够将其转换回双精度数组可以填充plhs[0]。
所以,像
mexFunction(plhs[],prhs[]){
int *data_array_ptr
data_array_ptr=(int *)mxGetData(prhs[0]);
a = mxGetM(prhs[0]);
int int_data[a];
copy(*data_array_ptr, *data_array_ptr+ a, int_data);
double *data_out_ptr;
plhs[0]= mxCreateDoubleMatrix( (mwSize)m, (mwSize)n, mxREAL);
data_out_ptr= mxGetPr(plhs[0]);
len6=mxGetM(plhs[0]);
vector<double> data_out_data(*data_out_ptr,*data_out_ptr+len6);
foo(int_data, *data_out_data)
copy(data_out_data.begin(), data_out_data.end(), data_out_ptr);
}
并且在 foo 返回时, data_out_data 将被填充。我的函数没有返回参数 data_out_data 必须是向量类型。如何将向量传递给 foo 以便 foo 可以编辑数据?
谢谢!!