C++ vector to MxArray as output for a MEX function

4 views (last 30 days)
Hi all,
I've been stuck on this for a few days; I have a function with many nested for-loops and I decided to create a MEX version in order to speed up its execution. So far so good, the compiled approach is, as expected, much faster.
I generate a non determinate number of data points that I store in an array. For now, I am creating a very large array hoping it will be big enough to store my data. But I would like it to be a tad more elegant and use dynamic arrays. Because I am adding one element at a time, I figured that re-allocating every iteration is not the most optimal approach. I then tried to use vectors (as in C++ vectors) but I ran into another issue:
I have the following:
vector<int> myVector(0);
To which I add elements using:
myVector.push_back(dataPoint);
My question is: how can I possibly copy the content of the vector at the end of my routine to an mxArray that I can thenuse as the output of my MEX function? I tried memcopy but somehow I keep getting seg faults.
Any help?
Thanks!
Nicolas
  2 Comments
James Tursa
James Tursa on 4 Nov 2011
Please show the code you are using to do the copying.
Kaustubha Govind
Kaustubha Govind on 4 Nov 2011
Also, please show us how you are constructing the mxArray.

Sign in to comment.

Accepted Answer

Nicolas Jaccard
Nicolas Jaccard on 4 Nov 2011
I guess this is a typical case of actually writing the question making me realize what was wrong!
I constructed my mxArray using mxCreateNumericMatrix but I used the wrong data type, in order to be compatible with my int vector, I had to use mxUINT16_CLASS as the type flag.
Nicolas

More Answers (0)

Categories

Find more on Write C Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!