C C 用匿名資料結構實現時間和空間名利雙收

2021-08-27 13:23:50 字數 1842 閱讀 3723

程式的時間和空間,往往是一對矛盾,比如計算crc32的時候會用到余式表

dword *crctable;    // dword[256];

余式表可以用某種規則計算生成,為縮短文章長度就不寫出來了,總之要做一堆資料處理,消耗時間

有時候為了提公升程式時間,我們直接在記憶體中宣告乙個計算好的余式表

dword crctable[256] =

這就是所謂的犧牲空間來換取時間,比如你一秒鐘要計算10000次之類的,當然聰明的程式設計師會使用某種機制來處理這種衝突

比如記錄是否已經生成:

inline int createtable(unsigned long dwpoly)

if(!bcreated)

// calc crc

然而,並不是所有的情況都那麼好處理,而且更多的情況是很難這樣處理,比如我們有乙個結構,儲存客戶資訊

struct stclient;

因為錄入的時候,各個資料是分散的,如果我們用乙個函式來設定這個這個結構

void setclient(dword id, lpstr name, float cash, ...)	// 1001 arguments .. oh ****!!

很明顯,大家都不是這種人,1000多個引數開什麼玩笑,那麼就乙個個設定吧

void setclientid(dword id)

void setclient***(dword ***)

// 1002 functions ... oh damn!!!

很明顯,大家也不是這種人,1000多個函式,開什麼國際玩笑,那麼怎麼辦,有了,用了大比大,全好了

void setclients(dword memid, dword dwarg, lpstr strarg, float farg)

}

可是存在乙個問題,雖然錄入程式只需處理乙個函式(介面),但是case太多,時間和空間的消耗都很大,難道我們就這樣任命了嗎?

當年我決定用c/c++的原因之一是因為她的靈活性,可以做正妻,也可以做小妾,還可以做情人...

沒必要為了家庭娶個正妻,為了忍受正妻,取個小妾,為了制約小妾,養個情人,所以..

typedef class cobj;	// no struct ****ing name

}; // no union ****ing name

cobj();

~cobj();

} obj;

cobj::cobj()

直接使用這些匿名結構的成員,當然了,不要重複,正妻就用正妻的名字,要叫夫人,情人就要換個名字,雖然是同乙個人

obj *o = new cobj;

o->dw[0] = 1;

o->point = 100.f;

printf("p-> %d, %d, %d.\n", o->id, o->dw[1], o->dw[2]);

輸出:

p-> 1, 1120403456, -842150451.

妙啊!妙啊!這是有屎以來最妙的資料結構了,讓我大吃一斤啊!

當然了,我不是教大家取小妾,養情人,而是另外的,***.現在正妻不會和小妾爭風吃醋,也不會和情人砍起來,時間和空間名利雙收啊,

皇上,您還記得西湖河畔的夏雨荷嗎?

C C 用匿名資料結構實現時間和空間名利雙收

分類 計算機技術 visual c 2013 07 25 09 38 272人閱讀收藏 舉報程式的時間和空間,往往是一對矛盾,比如計算crc32的時候會用到余式表 cpp view plain copy dword crctable dword 256 余式表可以用某種規則計算生成,為縮短文章長度就...

資料結構 後序遍歷,不用棧實現和用棧實現

樹的類 樹的節點 struct node int val node left node right 遞迴 後序遍歷 遞迴 void postorder recursion node node 非遞迴,用棧實現 後序遍歷 迴圈 void postorder stack node root if cur...

資料結構 順序佇列 和 用佇列實現楊輝三角形

1.佇列是特殊的線性表,隊頭 front 取出資料的一端 隊尾 rear 放入資料的一端 2.佇列的性質 先進先出 一般使用迴圈佇列 提高空間的利用率 空佇列 front rear 佇列滿時會空出一格 判斷佇列滿的條件 rear 1 queuesize front 計算佇列長度 rear front...