Matlab指針數組


Matlab指針數組

前面博客Matlab指針中介紹了如何在Matlab中使用handle類型對象作為指針使用,本文則介紹一些使用這些類型指針的小技巧。

自定義類型的指針數組

在大部分編程語言中,我們都可以采用結構體來定義一些自定義類型。對於多個自定義類型的變量數據組合,我們可以采用指針指向各個變量,然后將所有指針組成一個數組儲存起來(自定義類型指針數組)。如此便獲得了能夠訪問所有變量數據的簡單方法。

舉例來說,每個netcdf文件中都會包含多個變量,若每個變量都使用一個指針代替,並且將這些指針組成一個數組varArray,那么在代表netcdf文件的對象中,只需要一個成員變量varArray即可訪問所有變量所包含的內容,而不再需要將每個變量的指針都作為成員變量儲存起來。

Matlab中指針數組

在 Matlab 中,實現上面的過程就稍顯復雜。首先,Matlab 並沒有普通的指針,需使用handle類對象來代替。其次,相同類型的handle對象組成數組時需要特殊方法。

Matlab中一般的實數數組可以先聲明(申請內存),隨后對數組元素進行賦值。

np = 3
a  = zeros(np)
for i = 1:np
    a(np) = i^2;
end% for

但是這種方法並不適用於指針數組。

>> help zeros
 zeros  Zeros array.
    ......
 
    zeros(..., CLASSNAME) is an array of zeros of class specified by the
    string CLASSNAME.
 
    ......

查看help zeros命令可以看到,zeros可以生成某種類型變量(CLASSNAME),但是可惜的是,這並不包括用戶的自定義類型。

>> a = zeros(3, 'StdRegions.Line')
Error using zeros
CLASSNAME input must be a valid numeric or logical class name.

因此,唯一的一種辦法就是用大括號將各個指針連接起來變成一個數組。如

linArray = [];
for i = 1:3
    t = StdRegions.Line(i);
    linArray = [t, linArray];
end

注意需要首相將數組賦值為空向量,否則會報錯。得到結果為

>> linArray

linArray = 

  1x3 Line array with properties:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM