C++ resize和reserve詳解
阿新 • • 發佈:2018-12-01
先上程式碼:
#include <iostream> #include <vector> using namespace std; void display(const vector<int>& vec, char* vecName) { cout <<" "<< vecName << ":\n\tsize: " << vec.size() << "\n\tcapacity: " << vec.capacity() << "\n\t內容: "; for (vector<int>::const_iterator iter = vec.begin(); iter != vec.end(); iter++) { cout << *iter << " "; } cout <<"\n\n"; } int main() { vector<int> vecInt1; vector<int> vecInt2; for (int i = 0; i < 10; i++) { vecInt1.push_back(i); vecInt2.push_back(i); } cout << "---L0\t初始情況:" << endl; display(vecInt1, "vecInt1"); display(vecInt2, "vecInt2"); cout << "---L1\tvecInt1呼叫resize,vecInt2呼叫reserve後:" << endl; vecInt1.resize(5); // size變小 vecInt2.reserve(5); // reserve只有一個引數,即capacity大小 display(vecInt1, "vecInt1"); display(vecInt2, "vecInt2"); cout << "---L2\tvecInt1呼叫resize,vecInt2呼叫reserve後:" << endl; vecInt1.resize(13, 8); // 之後擴充的值都為第二個引數的值8 vecInt2.reserve(13); display(vecInt1, "vecInt1"); display(vecInt2, "vecInt2"); cout << "---L3\tvecInt1呼叫resize,vecInt2呼叫reserve後:" << endl; vecInt1.resize(15); // 之後擴充的值都為0 vecInt2.reserve(15); display(vecInt1, "vecInt1"); display(vecInt2, "vecInt2"); system("pause"); return 0; }
結果輸出:
由以上結果可知:
1、resize()會改變當前容器的“內容”(空間大小和內容值都可被改變) 。該函式有一或兩個引數。
2、reserve()只會改變當前容器的“容量”大小。
3、當resize改變了size後,capacity也可能被改變。但當reserve改變了capacity後,size並不會變化。