zoukankan      html  css  js  c++  java
  • vector容器删除某些元素且释放内存

    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,程序结果

  • 相关阅读:
    iBatis——自动生成DAO层接口提供操作函数(详解)
    【Spring Boot项目】Win7+JDK8+Tomcat8环境下的War包部署
    MySQL使用小记
    DB迁移:从SQL Server 2005到MySQL
    【文章学习】监控网页卡顿、崩溃
    为什么执行x in range(y)如此之快
    python笔试题(三)
    python笔试题(二)
    python笔试题(-)
    rest-framework(2)
  • 原文地址:https://www.cnblogs.com/sophia-hxw/p/6227729.html
Copyright © 2011-2022 走看看