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

  • 相关阅读:
    Go 语言简介(下)— 特性
    Array.length vs Array.prototype.length
    【转】javascript Object使用Array的方法
    【转】大话程序猿眼里的高并发架构
    【转】The magic behind array length property
    【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript
    【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
    【转】大话程序猿眼里的高并发
    php通过token验证表单重复提交
    windows 杀进程软件
  • 原文地址:https://www.cnblogs.com/sophia-hxw/p/6227729.html
Copyright © 2011-2022 走看看