可以改变std::string的容量来优化它吗?
例如:
std::string name0 = "ABCDEABCDEABCDEF";
int cap = name0.capacity(); //cap = 31
int size = name0.size(); //size = 16好的,这对于内存中的几个字符串来说是完全没有问题的,但是如果有数千个呢?这会浪费大量内存。那么使用char*是不是更好,这样你就可以控制为特定字符串分配了多少内存?
(我知道有些人会问为什么内存中有数千个字符串,但我想继续问我的问题,即字符串容量是否可以优化?)
发布于 2014-05-29 22:09:20
如果您正在询问如何减少capacity(),使其与size()匹配,那么C++11为此添加了shrink_to_fit(),但请注意这是一个非绑定请求,因此允许实现忽略它。
name0.shrink_to_fit();或者有创建临时字符串并交换的诀窍:
std::string(name0.begin(), name0.end()).swap(name0);但是,这两种方法都不能保证为您提供与size()匹配的capacity()。来自GotW #54
某些实现可能会选择将容量略微四舍五入到下一个更大的内部“块大小”,结果是容量实际上比大小略大。
https://stackoverflow.com/questions/23935177
复制相似问题