不使用任何現語言自帶的陣列,容器等,自己怎麼實現乙個陣列?

時間 2021-06-07 21:46:59

1樓:C十十20年

用類實現乙個矩陣很容易,因為矩陣維數固定為2維,但陣列的維數是任意維,所以實現起來很困難。總的來說,可以利用指標通過類實現。即定義乙個陣列類A,其中:

為指標成員e分配記憶體,用於存放陣列的所有元素;此外,定義乙個整型成員d,用於存放該陣列的維數;再定義乙個指標成員b,並為其分配d個整型單元記憶體,用於存放d維陣列每維的大小或界。至於A的建構函式就要使用可變型別引數個數,因為陣列的維數是任意維,可變型別引數個數參見《C++程式設計精要教程》。大致實現思路如下:

template

class A{

T **const e;//陣列元素型別為Tint d;//陣列總維數

int *b;//每維的界

int f;//原生即首次做e[i]=new Tpublic:

A( ); //無參建構函式

A(int s, Args...args);//第1維界為sA(const A&a);//深拷貝構造

A(A&&a);//移動構造

A operator[ ](int s);//降維:下標為s的元素operator T&( );//當A降維只剩乙個元素時A operator+(const A&a)const;//陣列加法A sum(int s);//類似Matlab的sum降維和A&operator=(const A&a);//深拷貝賦值A&operator=(A&&a);//移動賦值~A( );//析構函式:非原生時不delete e[i]關於A::

A(int s, Args...args)的實現思路:利用sizeof...

(Args)獲得除第一維界為s的剩餘維數,即A::d=1+sizeof... (Args); 剩餘維的界可利用整型指標p獲得:

int *p=&s; 於是陣列各維的界b[i]=p[i]。T**const e用雙重指標似乎多餘,但目的是服務於降維運算特別是成塊賦值運算。陣列在降至元素個數僅為1個時,可通過型別轉換operator T&()取該元素的值。

該陣列可以模擬Matlab運算,如A m(10, 10, 10); 則m. sum(0)得到乙個二維陣列;或類似Matlab的陣列「取塊」操作m[0:3, 1:

4, 2:5]得到乙個三維陣列,即3*3*3的新陣列,並可對該陣列賦值或析構(需利用原生標誌f),這是乙個可模擬Matlab的超級陣列,對陣列中的一塊元素一次性賦值不難實現。如果再加上C++2020的概念和約束,約束A::

A(int s, Args...args)的Args均為int則更為完美。在此拋磚引玉,忘各位大俠實現,望高手亮劍。

2樓:

首先,陣列和容器並不是一種東西。

陣列物理上只不過是一段連續的記憶體,你可能是想實現malloc。我自己沒做過,不過這裡有篇很好的文章。CodingLabs - 如何實現乙個malloc

你所說的各種各樣的容器,通常是指abstract data type。這種東西用陣列很好實現。常見資料結構的實現一般是本科資料結構課的課後作業。

這個符號是多數語言的表示陣列語法糖,如果你只是不想用這個符號表示陣列可能需要自己造個語言的前端。你如果自己發明一種語言。自己寫AST和parser是可以的。

某些語言支援過載操作符,這樣可能也能嘗試自己寫乙個不用符號代表陣列的DSL出來。具體我本身沒有系統學過編譯原理,還是要請大佬來講講。

如果說完全不用連續記憶體,即陣列,來儲存多於乙個的變數。你說的是鍊錶。實現乙個鍊錶然後再去實現所有的ADT是可能的,鍊錶本身也是種ADT。

如果你說的是不用多個指標,那在我知識範圍內不知道有沒有辦法。指標是存在在這個圖靈機這種計算模型裡。

在不使用Lua等指令碼語言的情況下,PC遊戲是怎麼製作遊戲流程內容的?

有木桑 變化的內容都是配置啊,就像excel那樣弄一堆表,然後通過一些方式讓遊戲去讀取,非數值類的需求會弄個編輯器,比如什麼關卡編輯器 技能編輯器什麼的。最後還是儲存成某些配置檔案。 熊起 DOS時代很多老遊戲 金庸,仙劍,很多日式遊戲 內部實現了一套類似彙編的指令碼語言,或者說叫批處理命令。這些語...

以現代科學在不使用任何電力的情況下能再建胡夫金字塔嗎?

風電氫能 沒有電,還有化學能。柴油機不用電也沒問題。液壓機也可以不用電。多鉚蒸鋼表示,沒電一樣玩的轉。而且,所謂不用電,是建設過程不用電,還是整個人類不用電?水泥讓不讓用?拖拉機讓不讓用?現代科學是一種多支撐系統學科,少一根柱子並不會讓現代科技坍塌。 離子 不能人的身體活動需要生物電來維持 如果這種...

在現版本下,人族在不使用獅鷲的情況下如何和獸族的黑白牛打下正面90人口團戰?

從零 獸族做到這三點,是沒有輸的劇本的。1.不戀戰,被人族風箏時一定要加速撤退或回程。2.不在狹窄地形開團。3.保護好後排白牛,黑白牛的核心是白牛,一定不要被集火。PS.沒有種族可以純地面拼贏獸族。 只求誅仙 這個只存在於想象中!想想獸族的幾個英雄,劍聖的疾風步和劍刃風暴,暗影獵手的群補和變羊,牛頭...