C++容器vector内存释放问题

文章讨论了C++标准库中的vector在调用clear()后,内存容量(capacity)不变的情况。尽管size和empty状态改变,但内存不会自动释放。作者提供了两种方法来释放内存:一是利用swap函数与空vector交换,二是使用shrink_to_fit()成员函数。这两种方法都能使vector的容量调整到与size一致,达到释放内存的目的。
摘要由CSDN通过智能技术生成

        今天突然遇到vector在使用clear之后,其内存(capacity不变)无法释放的问题:

    vector<int> v1{1,2,3};
    cout << v1.empty() << endl;
    cout << v1[0] << " " << v1.size() << " " << v1.capacity() << endl;
    v1.clear();
    cout << v1.empty() << endl;
    cout << v1[0] << " " << v1.size() << " " << v1.capacity() << endl; 

        输出结果:

0
1 3 3
1
1 0 3
0 3

        可以发现,在使用clear之后,size和empty改变了,但是capacity依旧是那么大(总算是理解C++Primer:vector在生命周期内,内存大小是只增不减)。

        这里提供两种释放方法:

第一种:作用域+临时变量+swap函数:swap函数可以直接交换容器的内存

    {
        std::vector<int>().swap(v1);  
    }
    cout << v1.size() << " " << v1.capacity() << endl;

    运行结果:
    0 0

第二种:不易发现的成员函数:shrink_to_fit去释放。

    v1.shrink_to_fit();
    cout << v1.size() << " " << v1.capacity() << endl; 
    运行结果:
    0 0  

        但是,虽然clear之后vector的内存不会释放,但是重新emplace_back之后的数据,会从容器内存起始地址开始重新存放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值