一、為什么C的數(shù)組必須要指明尺寸大小
不指明尺寸大小就無(wú)法開辟內(nèi)存。無(wú)論是在堆上還是棧上,為了實(shí)現(xiàn)常數(shù)時(shí)間的隨機(jī)訪問(wèn),數(shù)組元素都必須線性的分布在一段內(nèi)存里。
如果想實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的話,就意味著編譯器必須要插入額外的代碼來(lái)實(shí)現(xiàn)動(dòng)態(tài)的重分配內(nèi)存和轉(zhuǎn)移元素,這會(huì)給程序帶來(lái)額外的性能損耗。
c++的基本設(shè)計(jì)理念之一就是不引入任何沒有必要的cost。換言之,程序員不應(yīng)該(或者盡可能少的)為任何沒有使用的特性承擔(dān)性能開銷。
再者,一個(gè)可以動(dòng)態(tài)resize/reallocate的數(shù)組對(duì)于裸內(nèi)存和指針?lè)浅2挥押?。頻繁的數(shù)組操作會(huì)導(dǎo)致一個(gè)指針很難被固定在原地。這會(huì)使得很多復(fù)雜的直接操作內(nèi)存的編程技巧難以實(shí)現(xiàn)。
所以通常的實(shí)踐都是如果你確定不需要任何動(dòng)態(tài)數(shù)組特性,就用原生數(shù)組類型。
需要的話用std::vector。
延伸閱讀:
二、二叉樹和紅黑樹
二叉樹:對(duì)于表提供自增整形字段作為建立索引的列,那子元素總是添加去了右側(cè),導(dǎo)致左子樹一直為空,那么查找時(shí)就完全退化成了沒加索引那樣了。紅黑樹:紅黑樹解決了二叉樹不平衡的問(wèn)題。然為什么要費(fèi)力保持樹的平衡性?是因?yàn)闃涞牟檎倚阅苋Q于樹的高度,讓樹盡可能平衡,就能降低樹高。但因?yàn)槠涓腹?jié)點(diǎn)只能存在兩個(gè)子節(jié)點(diǎn),那在數(shù)據(jù)量大的時(shí)候,深度也很大。