• 关于mwArray 的一些资料(一)


    mxArray 和 mwArray 的区别

    转之于 http://blog.csdn.net/crystal_avast/article/details/7064796

    首先,mxArray是Matlab C 函数库的结构体,而mwArray是Matlab C++ 函数库中对mxArray的包装类。

    其次,二者的内存管理方式不同。mxArray的内存管理方式比较松散,由于是C函数库,没有数据封装,必须对临时阵列和约束阵列的概念极为明确,并且须 小心地防止内存泄漏(要多写好多代码)。尽管有自动内存管理机制(mlfEnterNewContext,mlfReleasePreviousContext),仍然要处处调用mlfAssign,麻烦得很。然而mwArray就好的多,一切交给 C++对象去搞定,你只要放心地用就可以了。不过Matlab C++函数库为了防止频繁内存分配和释放重写了内存分配和释放等函数。你会发现对于mwArray a,b; a=b;实际上并没有生成两个相同数据块,只是指针,只有发成数据改

    变时才copy完整数据。

        再次,这两个东西各自有一套与之相对应的函数。函数的返回值类型不同,需要多加注意。

             最后,用的时候mxArray要使用指针,而mwArray直接当类对象使。如果你不是Hardcore级的牛人或具有Hardcore倾向的潜牛人,强烈建议使用后者!可以把mwArray看成类似于程序语言中int, float等基本类型,在具体用 的过程中转换成你想要的类型。如果从面向对象编程的角度来看,mwArray其实就是所有数据类型的基类,类似于MFC中的Object对象。在 Matlab的开发中,所有的数据对象都先当成mwArray来看待,函数返回值也是以mwArray类型或mwArray数组返回,在二次开发中,根据 需要转换成需要的数据类型就可以了,我一般做是将mwArray先转成string,然后再将string解析成数值!mwArray感觉如同面向对象语言中的object类,正因为如此matlab的 变量和一般的编程语言不同,它不区分int,float等等。如果熟悉C#的话,对这个估计可以理解的更深。用matlab做法,mwarray是它的基 本数据类型,单个变量和数组均适用,具体需要的时候可以转换成相应的数据类型。详细的可以查查matlab的帮助文件,有比较详细的说明。

    声明

    mxArray:

    mxArray *a;

    mwArray:

    mwArray a;

    销毁

    mxArray

    mxDestroyArray a;

    mwArray

    mwArray类的析构函数自动销毁对象

    变量赋值

    mxArray

    memcpy(dest_ptr,source_ptr,MAX_SIZE);

    mwArray

    mwArray in1(3, 3, mxDOUBLE_CLASS, mxREAL);
    mwArray in2(3, 3, mxDOUBLE_CLASS, mxREAL);
    in1.SetData(data, 9);
    in2.SetData(data, 9);

     

  • 相关阅读:
    直接选择排序(C++模版技术实现)
    求素数
    快速排序(C++模版技术实现)
    堆排序(C++模版技术实现)
    简单链式二叉树(C++模版技术实现)
    归并排序(C++模版技术实现)
    求斐波那契数列的两种解法
    C++中改变setw(n)的对齐方式
    C中的64位整型
    Windows版GCC之TDMGCC 4.5.2
  • 原文地址:https://www.cnblogs.com/kmliang/p/2662943.html
Copyright © 2020-2023  润新知