size:
指目前容器中實際有多少元素,對應的resize(size_type)會在容器尾添加或刪除一些元素,來調整容器中實際的內容,使容器達到指定的大小。
capacity:
指最少要多少元素纔會使其容量從新分配,對應reserve(size_type new_size)會這置這個capacity值,使它不小於所指定的new_size。
因此用reserve(size_type)只是擴大capacity值,這些內存空間可能仍是「野」的,若是此時使用「[ ]」來訪問,則可能會越界。而resize(size_type new_size)會真正使容器具備new_size個對象。
元素訪問方式差異
在對vector進行訪問時,若是使用「[ ]」,則會像變通數組那樣,不進行越界的判斷。
若是使用「at(size_type)」函數則會先進行越界的判斷。ios
常常會用到vector中元素再也不使用,須要刪除元素且釋放內存的操做,記錄以下:
iter = strVec.erase(iter);
strVec是容器名稱,iter是迭代器,刪除元素後,迭代器指向下一個元素;
vector(Vec).swap(Vec);
將Vec的內存空洞清除;
vector().swap(Vec);
清空Vec的內存;
示例代碼:
#include"iostream"
#include"vector"
#include"string"數組
using namespace std; int main() { vector<string> strVec; strVec.push_back("Sophia"); strVec.push_back("and"); strVec.push_back("Nemo"); strVec.push_back("are"); strVec.push_back("good"); strVec.push_back("people."); cout << "The capacity of the original vector is: " << strVec.capacity() << endl; for (vector<string>::iterator iter = strVec.begin(); iter != strVec.end();) { if ((*iter) == "and") iter=strVec.erase(iter); else if((*iter) == "Nemo") iter = strVec.erase(iter); else iter++; } vector<string>(strVec).swap(strVec); cout << "After deleting two elements in the vector, now the capacity is: " << strVec.capacity() << endl; vector<string>().swap(strVec); cout << "After clearing, now the capacity is: " << strVec.capacity() << endl; system("Pause"); return 0; }