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; }