C++ STL的reserve函数
生活随笔
收集整理的這篇文章主要介紹了
C++ STL的reserve函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在閱讀ceph源碼過程中發現部分C++語法還是不夠熟悉,特此做一下筆記。
關于STL中的reserve函數的使用
reserve()是為容器預留空間,即為當前容器設定一個空間分配的閾值,但是并不會為容器直接allocate具體的空間,具體空間的分配是在創建對象時候進行分配得
以vector的reserve函數過程為例,直接看如下代碼,其中主要用到的幾個函數解釋如下
- capacity()獲取當前容器的預留空間
- size()獲取當前容器的實際空間
- erase()清除容器當前對象,也可以清除某一段區間內的對象。參數是迭代器類型
#include<iostream>
#include<vector>
using namespace std;
int main()
{/*根據最后的輸出情況可以看到容器的實際物理空間size是根據push的次數進行的變化,而容器的容量vector是2倍容量增長的。當size為1的時候會直接預分配兩個對象的空間,當size是3的時候直接預分配4個對象空間,當size是5的時候直接預分配8個對象空間。*/vector<int> test;cout << "get test capacity:"<< endl;int sz = test.capacity();for(int i =0; i< 100; ++i){test.push_back(i);if(test.capacity() != sz) {cout << "test capacity changed " << test.capacity() << endl;cout << "test memory size " << test.size() << endl;sz = test.capacity();}}cout << "the size of test at last " << test.size() << endl;/*這里是上一個循環不同的地方,這里直接預留100個對象空間,并且進行reserve()預留空間之后對象空間容量將不會再增長,直到容器物理容量超過對象預留空間*/vector<int> test_reserve;cout << "get test_reserve capacity " << endl;sz = test_reserve.capacity();test_reserve.reserve(100);cout << "get test_reserve's size is " << test_reserve.size() << " " << test_reserve.capacity() << endl;for(int i = 0;i < 10; ++i) {test_reserve.push_back(i);if(test.capacity() != sz) {sz = test_reserve.capacity();}}cout << "get test_reserve capacity " << test_reserve.size() << endl;/*ps:執行erase函數會返回下一個迭代器地址指向的對象,所以這里不需要迭代器對象執行++操作,否則迭代器對象指針會跳躍通過最后的輸出可以看到erase函數會清除對象,釋放對象占用的物理空間,但是容器預留的空間并不會發生變化*/vector<int>::iterator itr = test_reserve.begin();for(;itr != test_reserve.end() ; ) {test_reserve.erase(itr);cout << "the vector size after erase : " << test_reserve.size() << " value is " << *itr << endl;cout << "the vector capacity after erase : " << test_reserve.capacity() << endl;}return 0;
}
output如下:
//第一次未預留空間 reserve的輸出
get test capacity:
test capacity changed 1
test memory size 1
test capacity changed 2
test memory size 2
test capacity changed 4
test memory size 3
test capacity changed 8
test memory size 5
test capacity changed 16
test memory size 9
test capacity changed 32
test memory size 17
test capacity changed 64
test memory size 33
test capacity changed 128
test memory size 65
the size of test at last 100
//第二次設置reserve預留空間
get test_reserve capacity
get test_reserve's size is 0 100
get test_reserve capacity 10
//使用erase函數之后查看容器實際容量和預留容量
the vector size after erase : 9 value is 1
the vector capacity after erase : 100
the vector size after erase : 8 value is 2
the vector capacity after erase : 100
the vector size after erase : 7 value is 3
the vector capacity after erase : 100
the vector size after erase : 6 value is 4
the vector capacity after erase : 100
the vector size after erase : 5 value is 5
the vector capacity after erase : 100
the vector size after erase : 4 value is 6
the vector capacity after erase : 100
the vector size after erase : 3 value is 7
the vector capacity after erase : 100
the vector size after erase : 2 value is 8
the vector capacity after erase : 100
the vector size after erase : 1 value is 9
the vector capacity after erase : 100
the vector size after erase : 0 value is 9
the vector capacity after erase : 100
總結
以上是生活随笔為你收集整理的C++ STL的reserve函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这种招牌字 大小大概一平米 发光字 多少
- 下一篇: 求一个基督徒微信网名