C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())
说明
在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())相关推荐
- 磁盘空间不足怎么办?释放磁盘空间的4种方法
虽然现在硬盘的空间越来越大,但是在这个数据爆炸的时代中,总是会觉得存储空间不够用,一不注意磁盘就满了,那么除了清空回收站.卸载某些程序外,还能怎么释放磁盘空间呢? 方案一:禁用休眠 休眠是一种将计算机 ...
- 计算机释放磁盘空间常用方法,Win10系统释放磁盘空间的五种方法
如果win10系统电脑在运行时存储不足,我们可以采取释放磁盘空间来解决问题,释放磁盘的方法有很多种,拥有足够的磁盘空间可以加快系统运行速度.为此,接下去教程和大家分享Win10系统释放磁盘空间的五种方 ...
- 扩充swap空间的两种方法
扩充swap空间的两种方法: 方法一:分区的形式 #fdisk /dev/sdb ---> t ---> 82--->w #mkswap /dev/sdb1 ...
- 【操作系统】内存扩容的两种方法
覆盖与交换技术是在多道程序环境下用于扩充内存的两种方法. 覆盖 为了能让进程比它所分配到的内存空间大,可以使用覆盖(Overlay)技术. 覆盖会将用户空间划分为一个固定区和若干个覆盖区,经常调用的在 ...
- C/C++申请空间与释放空间的两种方法
1. C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size) 动态配置内 ...
- 计算机释放磁盘空间常用方法,7种方法释放Windows上的磁盘空间
硬盘越来越大,但不知何故,它们似乎总是满满的.如果您使用的是固态硬盘(SSD),这比传统的机械硬盘空间更是少得多. 如果你为硬盘空间而烦恼,这些技巧应该可以帮助你为重要的文件和程序腾出空间,通过消除不 ...
- 双像空间前方交会两种方法的比较
另外,对双向空间前方交会的基本概念做一些补充
- 如何增加VMWare虚拟机的磁盘空间(两种方法:增加磁盘方式和增加分区方式)
首先是通过增加磁盘的方式: 最近需要在虚拟机里面实际操作些东西,需要至少两个盘,一个系统盘,一个普通盘,结果发现安装完虚拟机后默认只有一个C盘,本来还想打算采用工具无损分区从C盘分出来一些,后来发现不 ...
- Python清空Redis的hash表的两种方法
方法1(推荐) 用conn.delete删除hash表名. conn = RedisCluster(startup_nodes=nodes,decode_responses=True, cluster ...
最新文章
- 夺得WSDM Cup 2020大赛金牌的这份参赛方案,速来get!
- R语言dplyr包的top_n函数返回dataframe或tibble的前N行数据、dplyr包的top_frac函数返回dataframe或tibble的前百分之N(N%)的数据
- BE镜像还原系统过程
- 迈向未来的那五种人,自古以来就很重要的人
- centos6 进入命令行_CentOS 6.x误删libc.so.6,紧急恢复
- JAVA入门: Annotation
- 无意间看到的浏览器记录......
- 合并k个有序链表 python_leetcode第23题-合并K个有序链表
- 【读书笔记】《深入浅出nodejs》第五章 内存控制
- 苹果高通“情变”祸及所有中国 iPhone 用户!
- 安装 Office 2010 错误 error 1935和数据库以及安卓路线
- python关键词挖掘_Python挖词脚本,挖出几十万关键词不是梦 带搜索量
- mysql运维工程师_运维工程师需要了解的MySQL运维经验
- 2022-03-25 Python作业3
- ServU 5.0的配置
- python:批量处理txt文件,读取txt文件内容,根据内容(例子为数字1)提取出对应txt文件到其他文件夹,后根据txt文件名提取对应名字图片。
- Android进阶之路 - 代码规范
- 消费心理学(01):心理账户
- 谣言检测文献阅读三—The Future of False Information Detection on Social Media:New Perspectives and Trends
- 计算机主板bos不存信息的原因,电脑主板BIOS经常复位是怎么回事?