C++ STL vector 清除内存


在C++的STL中, vector有几种方式可以在一定程度上管理和释放内存,以下为你详细介绍:

1. 使用clear函数(清除不了)

clear函数主要用于清除vector容器中的所有元素,它会将容器的大小变为0,但并不一定会立即释放所占用的内存空间给操作系统。

clear 的源码解析 链接

示例代码如下:

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    myVector.clear();
    // 此时容器大小变为0,但内存可能还未释放回操作系统
    std::cout << "Size after clear: " << myVector.size()<<"capicity" <<myVector.capicity()<< std::endl;
    return 0;
}

2. 结合swap技巧来释放内存

如果想要真正释放vector所占用的内存,可以通过swap的技巧来实现。其原理是创建一个临时的空vector,然后与原vector进行交换,这样原vector所占用的内存就会被释放(因为临时的空vector在其作用域结束后会自动析构并释放内存),而原vector得到的是临时空vector的较小内存空间。

示例代码如下:

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    std::vector<int>().swap(myVector);
    // 经过这一步,myVector的内存大概率已释放回操作系统
    std::cout << "Size after swap: " << myVector.size() << std::endl;
    return 0;
}

3. 利用shrink_to_fit函数(C++11及之后版本可用)

shrink_to_fit函数可以请求容器减少其容量以适应其当前的大小。不过需要注意的是,这只是一个请求,标准库并不保证一定会释放多余的内存,具体是否释放取决于标准库的实现。其实底层还是调用了swap

示例代码如下:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    myVector.clear();
    myVector.shrink_to_fit();
    // 尝试让vector释放多余的内存,实际释放情况依标准库实现而定
    std::cout << "Size after shrink_to_fit: " << myVector.size() << std::endl;
    return 0;
}

通常来说,使用swap技巧相对更能确保内存被释放回操作系统,而clearshrink_to_fit在不同的应用场景和标准库实现下效果可能会有所差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值