matalb中struct的詭異構造方式

2021-08-27 22:30:54 字數 1293 閱讀 5425

讀matconvnet**時被struct坑了,特此記錄!!!

[color=blue]官方文件[/color]:[url]

matlab中,struct可以有多種方式構造,

比如 [b]a.prop=1; a.prop2=2;[/b] 可以動態給struct新增屬性。

同時,我們也可以 [b]sm=struct('prop0',1, 'prop1',);[/b] 直接構造有多個屬性的struct

然而,如果問[b]sc=struct('prop0',1, 'prop1',{});[/b]的結果是什麼,相信很多人會說和上面那個差不多嘛,得到乙個具有兩個屬性的struct!!!

然而,,,

直接上**:

%% teststruct

sm=struct('prop0',1, ...

'prop1',); % 得到乙個struct,prop1為

%% sc=struct('prop0',1, ...

'prop1',{}); % 得到乙個空的struct, 等效於sc=struct(); 原因如下

%在 struct 中使用{}並非是新增了乙個cell型別的元素,甚至cell(0)也不是!!

%原因在於matlab中可以通過cell型別的變數一下子建立struct陣列,見下面語句

scs=struct('prop0',1, ...

'prop1',); % 得到struct array, 等效於下面兩個語句

scs2(1)=struct('prop0',1, ...

'prop1',1);

scs2(2)=struct('prop0',1, ...

'prop1',2);

%% 構造具有value={}的struct的正確姿勢

sc_withemptycell=struct('prop0',1, ...

'prop1',}); % 是的,沒錯,要兩層大括號

結果如下:

[img]

[size=x-large][color=blue]struct其他特性[/color][/size]

[color=blue]struct陣列中某一屬性轉matrix、cell[/color]

lists=dir('d:\');  %此時lists是乙個有多個屬性的struct array

m= [lists(:).isdir]; % isdir屬性轉陣列 , 直接省略(:)也行; 即 m=[lists.isdir]

c=;

popstate事件在webkit中的詭異行為

雖然官方的文件中對popstate的描述也沒有細節上的描述,不過以我的邏輯來判斷,這貨是就webkit的bug。html5的這一套historyapi和傳統的history不同,或者說這一套historyapi是 session history entries 雖然官方的文件並沒有強調它與傳統的hi...

c 中的結構 struct

c 中的結構使用struct關鍵字來宣告型別,struct型別是一種值型別,通常用來封裝小型相關變數組,和類是引用型別是不同的,乙個簡單例子 public struct custompoint public void printpoint ny x,y 幾點說明 1 可以為struct定義建構函式和...

C C 中struct的區別

這裡有兩種情況下的區別。1 c的struct與c 的class的區別。2 c 中的struct和class的區別。在第一種情況下,struct與class有著非常明顯的區別。c是一種過程化的語言,struct只是作為一種複雜資料型別定義,struct中只能定義成員變數,不能定義成員函式 在純粹的c語...