STL swap收縮vector空間

2021-09-26 18:48:45 字數 1663 閱讀 6207

目錄

size 與 capacity區別

resize()並不能縮容

#include#include#includeusing namespace std;

void printvector(vector& v) //vector型別

cout << endl;

}int main()

; vectorv1(arr, arr + sizeof(arr) / sizeof(int));//指標也是迭代器

cout << "size:" << v1.size() << endl;//元素個數

cout << "capacity:" << v1.capacity() << endl;//容量

printvector(v1);

v1.resize(2);

printvector(v1);

v1.resize(5);

printvector(v1);

v1.resize(6, 1);

printvector(v1);

cout << "size:" << v1.size() << endl;//元素個數

cout << "capacity:" << v1.capacity() << endl;//容量

return 0;

}

列印結果:

觀察發現:size<=capacity

#include#include#includeusing namespace std;

int main()

cout << "size:" << v.size() << endl;//元素個數

cout << "capacity:" << v.capacity() << endl;//容量

v.resize(10);

cout << "size:" << v.size() << endl;//元素個數

cout << "capacity:" << v.capacity() << endl;//容量

vector(v).swap(v);

cout << "size:" << v.size() << endl;//元素個數

cout << "capacity:" << v.capacity() << endl;//容量

return 0;

}

列印結果:

這裡簡單的使用swap,清除元素並**記憶體

vector(v).swap(v);  作用相當於:    

第一句產生乙個和v內容一模一樣的vector,只不過temp的容量是恰好滿足其大小的  。

第二句把v和temp交換 ,然後temp就自動解析掉了   

這樣寫的作用是:把v的容量縮小到最佳值,該例中執行這句時,capacity收縮到 10。

STL swap潛在的危險

在學習c 程式設計的時候,都使用過標準庫 stl 當中的swap,但更多的是swap int,int 或 者等等一些基本的型別,發散一下是否也可以用來置換自定義的乙個型別,比如說某一class 定義乙個class相當於定義乙個type了 先不從效率上來考慮,看看可行性如何。ps 歡迎討論。在stl中...

mysql收縮空間 Oracle表空間收縮方案

對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表 應用背景 某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。處理方案 ...

ms sql收縮日誌

set nocount on declare logicalfilename sysname,maxminutes int,newsize int use tolldb ic 要操作的資料庫名 select logicalfilename tolldb ic log 日誌檔名 maxminutes ...