У меня есть код C ++, который генерирует некоторую последовательность целых чисел. Мне нужно написать мекс-файл для Matlab, который даст мне вывод.
#include "mex.h"
#include <vector>
#include <random>
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
double *Input;
mxArray *mxInput,*mxOutput;
//associate inputs
mxInput = mxDuplicateArray(prhs[0]);
Input=mxGetPr(mxInput);
// number of Steps
int NumOfSteps = (int) Input[0];
// collect diffs
std::vector <int> result_vector;
// Initialize random generator
std::random_device rnd_device;
std::mt19937_64 rg(rnd_device());
std::normal_distribution<double> Xi(0,1);
// iterate
for (int iStep=0; iStep<NumOfSteps;iStep++)
{
if ((Xi(rg)-Xi(rg)) >= 0.5)
{
result_vector.push_back(iStep);
}
}
// Here i should copy result_vector to output
}
У меня есть идея, как сделать это с помощью цикла, поэтапно справляясь с результатами, но я надеюсь, что должно быть лучшее решение.
Не могли бы вы дать мне несколько советов, как сделать вывод result_vector
в моем mex-файле?
Обновление:
Я нашел следующее решение:
int vecN = result_vector.size();
mxOutput = plhs[0] = mxCreateDoubleMatrix(1,vecN, mxREAL);
Output=mxGetPr(mxOutput);
std::copy(result_vector.begin(),result_vector.end(),Output);
Я действительно плох в C ++, это правильно?