STL常見問題

2021-08-02 16:02:00 字數 1010 閱讀 5135

vector

vector中:

reserve()函式:預先分配一塊較大的指定大小的記憶體空間,其中n為分配空間的大小;

預留一定的空間,如果n < capacity(),並不會減少空間;

void reserve(size_type n)   

}

resize()函式: 會改變元素的數目,不改變記憶體空間的大小;

void resize(size_type new_size, const t& x)
vector陣列是怎麼增長的?使用 k=2 增長因子的問題在於,每次擴充套件的新尺寸必然剛好大於之前分配的總和,每次需要申請的空間都無法用到前面釋放的記憶體。

也就是說,之前分配的記憶體空間不可能被使用。這樣對於快取並不友好,最好把增長因子設為 1 < k < 2,例如 1.5

比較記憶體分配的情況:

可以看到,k = 1.5 在幾次擴充套件之後,可以重用之前的記憶體空間。

如果只考慮時間複雜度的話,假設n次push,k取常數倍,n很大,則平均時間複雜度:

通過式子可以發現k > 1其實都是常數複雜度。同時此時當然k越大越好,最好一次性把堆都給你了,複雜度常數接近1,但是考慮到s(n)的平均情況有下圖,假設每次push時程式所佔記憶體是n,把這個空間因素加到 ∑ 的因子有下面的結論:

如果每次增按常數c增加,n次push的worst running time是o(n^2), 平攤到每次是o(n). 如果按兩倍增加,n次push的worst running time是o(n), 單次push是o(1) 。當然可以放大增加的倍數, 但是如果增加的倍數更大,相應的每次空餘的記憶體也更多。

STL容器使用常見問題整理

1 vector的刪除 初始化 vectorvectest vectest.push back 100 vectest.push back 200 vectest.push back 300 vectest.push back 400 刪除 vector iterator itor for itor...

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...

面試常見問題 1 this的常見問題

this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...