vector容器删除某些元素且释放内存

    xiaoxiao2021-04-16  28

    1,size和capacity

    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)”函数则会先进行越界的判断。

    2,应用

    经常会用到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; }

    3,程序结果

    转载请注明原文地址: https://ju.6miu.com/read-672260.html

    最新回复(0)