说明

在STL中 vector和string 是比较特殊的,clear()之后是不会释放内存空间的,也就是size()会清零,但capacity()不会改变,需要手动去释放,说明 clear() 没有释放内存。
想释放空间的话,除了swap一个空string外,c++11里新加入的的std::basic_string::shrink_to_fit 也可以。

代码

注意string的swap清空方法为:string().swap(str);

vector的swap清空方法为:nums.swap(vector<int>());

#include <iostream>
#include <string>int main()
{std::string s;std::cout << "Default-constructed capacity is " << s.capacity()<< " and size is " << s.size() << '\n';for (int i = 0; i < 42; i++)s.append(" 42 ");std::cout << "Capacity after a couple of appends is " << s.capacity()<< " and size is " << s.size() << '\n';s.clear();std::cout << "Capacity after clear() is " << s.capacity()<< " and size is " << s.size() << '\n';s.shrink_to_fit();std::cout << "Capacity after shrink_to_fit() is " << s.capacity()<< " and size is " << s.size() << '\n';for (int i = 0; i < 42; i++)s.append(" 42 ");std::cout << "Capacity after a couple of appends is " << s.capacity()<< " and size is " << s.size() << '\n';string().swap(s);std::cout << "Capacity after swap() is " << s.capacity()<< " and size is " << s.size() << '\n';
}

输出为:

Default-constructed capacity is 15 and size is 0
Capacity after a couple of appends is 235 and size is 168
Capacity after clear() is 235 and size is 0
Capacity after shrink_to_fit() is 15 and size is 0
Capacity after a couple of appends is 235 and size is 168
Capacity after swap() is 15 and size is 0

C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())相关推荐

  1. 磁盘空间不足怎么办?释放磁盘空间的4种方法

    虽然现在硬盘的空间越来越大,但是在这个数据爆炸的时代中,总是会觉得存储空间不够用,一不注意磁盘就满了,那么除了清空回收站.卸载某些程序外,还能怎么释放磁盘空间呢? 方案一:禁用休眠 休眠是一种将计算机 ...

  2. 计算机释放磁盘空间常用方法,Win10系统释放磁盘空间的五种方法

    如果win10系统电脑在运行时存储不足,我们可以采取释放磁盘空间来解决问题,释放磁盘的方法有很多种,拥有足够的磁盘空间可以加快系统运行速度.为此,接下去教程和大家分享Win10系统释放磁盘空间的五种方 ...

  3. 扩充swap空间的两种方法

    扩充swap空间的两种方法: 方法一:分区的形式 #fdisk  /dev/sdb         ---> t ---> 82--->w #mkswap /dev/sdb1     ...

  4. 【操作系统】内存扩容的两种方法

    覆盖与交换技术是在多道程序环境下用于扩充内存的两种方法. 覆盖 为了能让进程比它所分配到的内存空间大,可以使用覆盖(Overlay)技术. 覆盖会将用户空间划分为一个固定区和若干个覆盖区,经常调用的在 ...

  5. C/C++申请空间与释放空间的两种方法

    1.   C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size) 动态配置内 ...

  6. 计算机释放磁盘空间常用方法,7种方法释放Windows上的磁盘空间

    硬盘越来越大,但不知何故,它们似乎总是满满的.如果您使用的是固态硬盘(SSD),这比传统的机械硬盘空间更是少得多. 如果你为硬盘空间而烦恼,这些技巧应该可以帮助你为重要的文件和程序腾出空间,通过消除不 ...

  7. 双像空间前方交会两种方法的比较

    另外,对双向空间前方交会的基本概念做一些补充

  8. 如何增加VMWare虚拟机的磁盘空间(两种方法:增加磁盘方式和增加分区方式)

    首先是通过增加磁盘的方式: 最近需要在虚拟机里面实际操作些东西,需要至少两个盘,一个系统盘,一个普通盘,结果发现安装完虚拟机后默认只有一个C盘,本来还想打算采用工具无损分区从C盘分出来一些,后来发现不 ...

  9. Python清空Redis的hash表的两种方法

    方法1(推荐) 用conn.delete删除hash表名. conn = RedisCluster(startup_nodes=nodes,decode_responses=True, cluster ...

最新文章

  1. 夺得WSDM Cup 2020大赛金牌的这份参赛方案,速来get!
  2. R语言dplyr包的top_n函数返回dataframe或tibble的前N行数据、dplyr包的top_frac函数返回dataframe或tibble的前百分之N(N%)的数据
  3. BE镜像还原系统过程
  4. 迈向未来的那五种人,自古以来就很重要的人
  5. centos6 进入命令行_CentOS 6.x误删libc.so.6,紧急恢复
  6. JAVA入门: Annotation
  7. 无意间看到的浏览器记录......
  8. 合并k个有序链表 python_leetcode第23题-合并K个有序链表
  9. 【读书笔记】《深入浅出nodejs》第五章 内存控制
  10. 苹果高通“情变”祸及所有中国 iPhone 用户!
  11. 安装 Office 2010 错误 error 1935和数据库以及安卓路线
  12. python关键词挖掘_Python挖词脚本,挖出几十万关键词不是梦 带搜索量
  13. mysql运维工程师_运维工程师需要了解的MySQL运维经验
  14. 2022-03-25 Python作业3
  15. ServU 5.0的配置
  16. python:批量处理txt文件,读取txt文件内容,根据内容(例子为数字1)提取出对应txt文件到其他文件夹,后根据txt文件名提取对应名字图片。
  17. Android进阶之路 - 代码规范
  18. 消费心理学(01):心理账户
  19. 谣言检测文献阅读三—The Future of False Information Detection on Social Media:New Perspectives and Trends
  20. 计算机主板bos不存信息的原因,电脑主板BIOS经常复位是怎么回事?

热门文章

  1. UGUI的text赋值问题-速度
  2. 关于流水线中剪裁的疑问
  3. linux服务器配置https访问
  4. ZooKeeper Dynamic Reconfiguration (dynamicConfigFile) ZooKeeper动态配置
  5. linux常用命令 运算命令
  6. [翻译练习] #selector() 和响应者链
  7. 【2】HashMap
  8. 前端开发跨浏览器计算页面大小、滚动高度
  9. 代码:准确算出用户输入的日期是星期几!
  10. c#生成随机位数的汉字字符串