成員方法 | 功能 |
---|---|
size() | 告訴我們當前 vector 容器中已經存有多少個元素,但僅通過此方法,無法得知 vector 容器有多少儲存空間。 |
capacity() | 告訴我們當前 vector 容器總共可以容納多少個元素。如果想知道當前 vector 容器有多少未被使用的儲存空間,可以通過 capacity()-size() 得知。注意,如果 size() 和 capacity() 返回的值相同,則表明當前 vector 容器中沒有可用儲存空間了,這意味著,下一次向 vector 容器中新增新元素,將導致 vector 容器擴容。 |
resize(n) | 強制 vector 容器必須儲存 n 個元素,注意,如果 n 比 size() 的返回值小,則容器尾部多出的元素將會被解構(刪除);如果 n 比 size() 大,則 vector 會藉助預設建構函式建立出更多的預設值元素,並將它們儲存到容器末尾;如果 n 比 capacity() 的返回值還要大,則 vector 會先擴增,在新增一些預設值元素。 |
reserve(n) | 強制 vector 容器的容量至少為 n。注意,如果 n 比當前 vector 容器的容量小,則該方法什麼也不會做;反之如果 n 比當前 vector 容器的容量大,則 vector 容器就會擴容。 |
vector<int>myvector; for (int i = 1; i <= 1000; i++) { myvector.push_back(i); }值得一提的是,上面程式碼的整個迴圈過程中,vector 容器會進行 2~10 次自動擴容(多數的 STL 標準庫版本中,vector 容器通常會擴容至當前容量的 2 倍,而這裡 1000≈2 10),程式的執行效率可想而知。
vector<int>myvector; myvector.reserve(1000); cout << myvector.capacity(); for (int i = 1; i <= 1000; i++) { myvector.push_back(i); }相比前面的程式碼實現,整段程式在執行過程中,vector 容器的容量僅擴充了 1 次,執行效率大大提高。
關於怎樣去除 vector 容器多餘的容量,可以借助該容器模板類提供的 shrink_to_fit() 成員方法,另外後續還會講解如何使用 swap() 成員方法去除 vector 容器多餘的容量,兩種方法都可以。