vector 比 vector慢的原因和替代方法

2021-09-30 18:02:02 字數 604 閱讀 9396

vector不是容器,至少,不是標準意義上的容器。

vector的名稱有點讓人誤解,因為其內部元素實際上並不是標準的bool值,標準的bool值至少與char擁有一樣的大小,從而可以被「正常」使用。

然而c++標準對於vector值有其特殊的實現方法。目的是為了減小空間的耗用。特殊版本內部只使用乙個bit來儲存乙個元素,所以通常要比一般的bool值小8倍之多。

但是這裡就帶來了乙個小麻煩,c++的最小可定址值通常以byte為單位,所以上述的vector特殊版本的references和iterators經過了特殊的處理,並不是bool值的實際位址,而是乙個「**物件」。這樣,對於一般類可以使用的以下操作:

t* p = &v.front

對於vector值來說,並不適用。

除此之外,由於vector通過**物件進行訪問訪問時需要執行逐位處理,訪問速度通常比int之類的普通型別操作要慢很多。

因此,對vecotr的使用需慎重考慮以下幾點:

(1)是否需要犧牲速度來獲取空間上的優化

(2)演算法中會否有對vecotr位址進行解引用操作的可能。

如果不滿足以上條件,建議使用deque來取代vector,功能基本相同,但deque未對其進行特殊處理。

AS3 0雜記 Vector與Array的比美

伴隨著flashplayer10和flashcs4發布,一種新的as3資料型別誕生了 vector。vector是一種特殊的陣列,他與array對比如下 1.vector的每乙個元素都有相同的資料型別,而且該型別必須在定義vector時指定。對於vector物件,使用 push 方法或 unshif...

C 中vector和vector的區別

在使用stl容器 比如map list vector等 的時候,是用放乙個物件還是放乙個物件指標,即是用vector還是vector,這裡的vector可以換成其他的容器,int可以換成其他基本型別,也可以自定義的資料結構或類。首先,要說明的是,這兩種方式,怎麼用都可以實現功能,把一組整型數放到容器...

c 中vector和vector的用法區別

在使用stl容器 比如map list vector等 的時候,是用放乙個物件還是放乙個物件指標,即是用vector還是vector,這裡的vector可以換成其他的容器,int可以換成其他基本型別,也可以自定義的資料結構或類。首先,要說明的是,這兩種方式,怎麼用都可以實現功能,把一組整型數放到容器...