• vector中删除元素后,如何有效的释放无效元素的内存


    .erase()只是删除了元素内容,并不能改变容量大小;

    举例:

    35 void testvector()
    36 {
    38     vector v;
    39     v.push_back(1);
    40     v.push_back(2);
    41     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
    42     v.erase(v.begin());
    43     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
    44     vector(v).swap(v); // 清除v而且最小化它的容量
    45     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
    47 }

    结果如下:
    [hfx@didkey1 bin]$ ./test
    v size = 2 v capacity = 2
    v size = 1 v capacity = 2
    v size = 1 v capacity = 1

    .clear()函数,只能清空内容,不能改变容量大小
    c. vector容器删除不自动释放内存,那么它存在内存泄露???不是的,vector在析构函数的时候,对内存进行了释放。
    d. 如果要想在删除内容的同时释放内存,那么你可以选择deque容器。
    e. 关于vector:
    vector相当于c++中的数组,数组在初始化的时候也需要给它一个数组空间大小,vector申请的时候将预留一个空间,比如10,在元素超过10的时候,vector自动将大小
    扩大到两倍,并且将元素拷贝过去。

    用法举例:
     vector(v).swap(v);将v的内存空洞清除
     vector().swap(v);清空vec

     
     
  • 相关阅读:
    王妃
    某个奇怪的引理 学习总结
    多项式求ln,求exp,开方,快速幂 学习总结
    第二类斯特林数 学习总结
    cojs QAQ的图论题 题解报告
    cojs QAQ的序列 解题报告
    QAQ OI生涯の最后一个月
    cojs 疯狂的字符串 题解报告
    【51Nod 1238】最小公倍数之和 V3
    【51Nod 1190】最小公倍数之和 V2
  • 原文地址:https://www.cnblogs.com/mmziscoming/p/5806922.html
Copyright © 2020-2023  润新知