VC結構體實現類似陣列的下標操作符功能

2021-06-20 11:37:50 字數 1703 閱讀 2355

在某些特殊時候,我們會想如果結構體也能向陣列一樣通過下標操作符進行操作的話,**將直接通過迴圈語句就能實現,尤其當我們的資料**於資料庫獲得的資料集時,這種用法還是比較有意思的。

結構體的下標操作這裡只做技術上研究,實際開發中非常不提倡這麼用。原因是這種結構體當成員很多時結構體占用記憶體將會非常大(結構體size=max(成員size)*成員數),而當結構體成員很少時完全沒有必要用下標操作符。這種結構體的下標操作符在實際開發應用中,幾乎是沒有可用價值的。

要實現結構體的下標操作符,我們需要了解,我們所設定的結構體的成員大小必須有規律,那我們直接假設各成員的記憶體大小是相等的,就比較簡單了。怎麼樣才能使結構體的成員記憶體大小都一樣,而且我們還要使結構體支援不同型別的成員?這時就可以想到共同體union了,共同體的好處是各成員共享記憶體。

按這個思路,我們首先將我們需要的類似通過共同體自定義一種新的統一型別:

typedef union __un_my_var

void clear()

} myvar;

以上我定義了乙個新型別myvar,支援字串、整形和浮點型。然後我們就可以用該新型別進行結構體的定義了:

typedef struct __stu_my_data

mydata;

typedef struct __stu_my_data

myvar & operator(int index)

} mydata;

這樣一來,假設有乙個結構體物件

mydata data;

那麼我們就可以直接通過下標來操作結構體成員了,例如data[0],data[1],data[2]的形式。

我編寫了完整的測試**如下:

// testunionstruct.cpp : 定義控制台應用程式的入口點。

用python實現結構體陣列

在c語言中我們可以通過struct關鍵字定義結構型別,結構中的字段佔據連續的記憶體空間,每個結構體占用的記憶體大小都相同,因此可以很容易地定義結構陣列。和c語言一樣,在numpy中也很容易對這種結構陣列進行操作。只要numpy中的結構定義和c語言中的定義相同,numpy就可以很方便地讀取c語言的結構...

基於結構體陣列的鍊錶實現

基於結構體陣列的鍊錶實現 made by winlin 2011.4.11 initialize 初始化儲存池 insertnode 插入乙個節點 deletenode 刪除乙個節點 display member 顯示儲存池裡面的資料 display info 顯示儲存池當前的資訊 isempty ...

結構體的二維陣列實現

csdn toc 結構體二維陣列 問題提出 假設現在我們要進行乙個隨機迷宮設計 要求 迷宮隨機產生 迷宮各個單元相互連通但又不至於所有房間之間的牆全部去除。注意 在開始解決這個問題之初,我們應該考慮如果我們要使用結構體來對單個迷宮單元進行屬性劃分 那麼,我們就需要使用二維結構體陣列 表示迷宮矩陣 在...