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