mwArray
mwArray(mwSize num_dims, const mwSize* dims, mxClassID mxID,mxComplexity cmplx = mxREAL)
num_rows :行数; num_cols :列数;mxID:The data type type of the matrix.: cmplx:The complexity of the matrix (numeric types only).
mwArray a(2, 2, mxDOUBLE_CLASS);
mwArray b(3, 3, mxSINGLE_CLASS, mxCOMPLEX);
mwArray c(2, 3, mxCELL_CLASS);
mwArray(mwSize num_rows, mwSize num_cols, mxClassID mxID,mxComplexity cmplx = mxREAL)
mwArray(mwSize num_strings, const char** str)
mwArray(mwSize num_rows, mwSize num_cols, int num_fields,const char** fieldnames)
mwArray(mwSize num_dims, const mwSize* dims, int num_fields,const char** fieldnames)
2) 方法
mwSize NumberOfElements() const
mwSize NumberOfNonZeros() const
mwSize MaximumNonZeros() const
mwSize NumberOfDimensions() const
mwString GetFieldName(int index)
bool Equals(const mwArray& arr) const
int CompareTo(const mwArray& arr) const
mwArray Get(mwSize num_indices, ...)
mwArray Get(const char* name, mwSize num_indices, ...)
mwArray Get(mwSize num_indices, const mwIndex* index)
mwArray Get(const char* name, mwSize num_indices, const mwIndex*index)
void GetData(* buffer, mwSize len) const
void GetLogicalData(mxLogical* buffer, mwSize len) const
void GetCharData(mxChar* buffer, mwSize len) const
void SetData(* buffer, mwSize len)
#include "mclcppclass.h"
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double data_copy[4] ;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(rdata, 4);
a.GetData(data_copy, 4);
void SetLogicalData(mxLogical* buffer, mwSize len)
void SetCharData(mxChar* buffer, mwSize len)
4.
Seventy
http://www.simwe.com/forum/post/view?bid=19&id=361497&sty=1&tpg=7&age=100
首先,mxArray是Matlab C 函数库的结构体,而mwArray是Matlab C++ 函数库中对mxArray的包装类。
其次,二者的内存管理方式不同。mxArray的内存管理方式比较松散,由于是C函数库,没有数据封装,必须对临时阵列和约束阵列的概念极为明确,并且须小心地防止内存泄漏(要多写好多代码)。尽管有自动内存管理机制(mlfEnterNewContext,mlfReleasePreviousContex
再次,这两个东西各自有一套与之相对应的函数。函数的返回值类型不同,需要多加注意。
最后,用的时候mxArray要使用指针,而mwArray直接当类对象使。如果你不是Hardcore级的牛人或具有Hardcore倾向的潜牛人,我强烈建议你使用后者!
举一个简单的例子:如果你需要计算c=a+b那么两者的区别是这样的:
mxArray:
void fun(){
……
double d_a=1,d_b=2;
mxArray *a,*b,*c;
mlfEnterNewContext(0,0);
mlfAssign(&a,mlfScalar(d_a));
mlfAssign(&b,mlfScalar(d_b));
mlfAssign(&c,mlfPlus(a,b));
……
mlfReleasePreviousContex
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}
mwArray:
void fun(){
……
mwArray a,b,c;
a=1;
b=2;
c=a+b;
……
}