1. 程式人生 > >C++面試題:介紹一下STL,STL如何實現vector

C++面試題:介紹一下STL,STL如何實現vector

STL(Standard Template Library),即標準模板庫,是一個具有工業強度的,高效的C++程式庫。它被容納於C++標準程式庫中,包括容器、演算法、迭代器元件。
vector內部使用動態陣列的方式實現的。如果動態陣列的記憶體不夠用,就要動態的重新分配,一般是當前大小的兩倍,然後把原陣列的內容拷貝過去。所以,在一般情況下,其訪問速度同一般陣列,只有在重新分配發生時,其效能才會下降。注意vector的size()和capacity()是不同的,前者表示陣列中元素的多少,後者表示陣列有多大的容量。由上面的分析可以看出,使用vector的時候需要注意記憶體的使用,如果頻繁地進行記憶體的重新分配,會導致效率低下。
它的內部使用allocator類進行記憶體管理,程式設計師不需要自己操作記憶體。

vector其中一個特點:記憶體空間只會增長,不會減小,援引C++ Primer:為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每一個元素都緊挨著前一個元素儲存。設想一下,當vector新增一個元素時,為了滿足連續存放這個特性,都需要重新分配空間、拷貝元素、撤銷舊空間,這樣效能難以接受。因此STL實現者在對vector進行記憶體分配時,其實際分配的容量要比當前所需的空間多一些。就是說,vector容器預留了一些額外的儲存區,用於存放新新增的元素,這樣就不必為每個新元素重新分配整個容器的記憶體空間。