1.vector底層實現原理
以下是?std::vector
?的一般底層實現原理:
內存分配:當創建一個?std::vector
?對象時,會分配一塊初始大小的連續內存空間來存儲元素。這個大小通常會隨著?push_back()
?操作而動態增加。
容量和大小:std::vector
?有兩個重要的成員變量:容量(capacity)和大小(size)。容量指向當前已分配內存空間的大小,而大小則表示當前?std::vector
?中元素的數量。
元素訪問:通過使用指針進行偏移來訪問數組中的元素。因為?std::vector
?是一個線性連續結構,在使用迭代器或下標訪問時可以直接計算偏移地址。
動態擴展:當向?std::vector
?添加新元素時,如果當前容量不足以容納新元素,就需要重新分配更大的內存空間,并將原始數據拷貝到新地址上去。這可能導致數據復制開銷較大。
push_back(const T& value):向 vector 尾部添加一個元素。pop_back():刪除 vector 尾部的一個元素。size():返回當前 vector 中元素的個數。capacity():返回當前 vector 的容量(即分配了多少內存空間)。resize(size_type n, const T& val = T()):改變 vector 的大小,并且可以指定新添加元素的默認值。clear():清空 vector 中所有元素,使其大小變為 0。empty():判斷 vector 是否為空,如果為空則返回 true,否則返回 false。迭代器相關方法:begin() 和 end(): 返回指向第一個和最后一個元素之后位置(尾部)的迭代器。
可以使用迭代器遍歷并訪問 vector 中的所有元素。
下標操作符重載[]: 通過下標訪問特定位置上的元素。
2. vector的內存增長機制
省流:內存只增加不減少,gcc每次增長會翻倍,vs會增加0.5倍?
3. vector中reserve和resize的區別
省流:省不了一點
4. vector為什么不能存儲引用?
引用是別名,不是對象,沒有實際地址,不能定義引用的指針,也不能定義引用的引用
這是一條吃飯博客,由挨踢零聲贊助。學C/C++就找挨踢零聲,加入挨踢零聲,面試不挨踢!