C++學習筆記std::vector底層原理及擴容
std::vector
std::vector是C++標準庫中的一個容器,它提供了動態(tài)數(shù)組的功能。它的底層實現(xiàn)是通過連續(xù)的內(nèi)存塊來存儲元素,這使得它能夠在O(1)的時間復雜度下進行隨機訪問。
當創(chuàng)建一個std::vector對象時,它會分配一塊初始大小的內(nèi)存空間來存儲元素。這個初始大小可以通過構造函數(shù)的參數(shù)指定,如果沒有指定,默認為0。std::vector還會維護兩個重要的變量:size和capacity。size表示當前已存儲元素的數(shù)量,而capacity表示當前分配的內(nèi)存空間的大小。
當我們向std::vector中添加元素時,它會首先檢查是否有足夠的容量來存儲新的元素。如果當前容量不足,std::vector就需要進行擴容操作。
std::vector的擴容機制是通過重新分配內(nèi)存來實現(xiàn)的。當容量不足時,std::vector會分配一個更大的內(nèi)存塊,并將原來的元素復制到新的內(nèi)存中。通常,新的容量會比原來的容量大一些,以便減少頻繁的擴容操作。具體來說,std::vector通常會將容量擴大為原來的兩倍,但這并不是絕對的,具體實現(xiàn)可能會有所不同。
在進行內(nèi)存重新分配時,std::vector會調用元素類型的拷貝構造函數(shù)來復制元素。如果元素類型沒有提供拷貝構造函數(shù),則無法使用std::vector存儲該類型的對象。
一旦完成內(nèi)存的重新分配和元素的復制,std::vector會釋放原來的內(nèi)存,并更新size和capacity的值。這樣,我們就可以繼續(xù)向std::vector中添加新的元素了。
擴容
下面是一個簡單的例子,演示了std::vector的擴容操作:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
std::cout << "Capacity: " << v.capacity() << std::endl; // 輸出:Capacity: 0
for (int i = 0; i < 10; i++) {
v.push_back(i);
std::cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;
}
return 0;
}需要注意的是,由于重新分配內(nèi)存和元素復制的開銷,std::vector的擴容操作可能會導致性能損失。因此,為了避免頻繁的擴容操作,我們可以通過預先設置std::vector的初始容量來提高性能。
總結
std::vector的底層原理是通過連續(xù)的內(nèi)存塊來存儲元素,它的擴容機制是通過重新分配內(nèi)存和元素復制來實現(xiàn)的。
以上就是C++學習筆記std::vector底層原理及擴容的詳細內(nèi)容,更多關于C++ std::vector擴容的資料請關注腳本之家其它相關文章!
相關文章
vs2019 MFC實現(xiàn)office界面的畫圖小項目
本文主要介紹了vs2019 MFC實現(xiàn)office界面的畫圖小項目,對大家入門有一定的幫助,需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
內(nèi)聯(lián)函數(shù)inline與宏定義深入解析
類的內(nèi)斂函數(shù)是一個真正的函數(shù)。使用內(nèi)聯(lián)函數(shù)inline可以完全取代表達式形式的宏定義2013-09-09

