可以更改std :: string容量以进行优化吗?

时间:2014-05-29 13:58:53

标签: c++ string memory

是否可以更改std :: string容量以优化它?

例如:

std::string name0 = "ABCDEABCDEABCDEF";
int cap = name0.capacity();  //cap = 31
int size = name0.size();     //size = 16

好吧,对于内存中的几个字符串来说这是完全正常的,但如果有数千个呢?这浪费了很多记忆。是不是最好使用char *,这样你就可以控制为特定字符串分配多少内存?

(我知道有些人会问为什么内存中有数千个字符串,但我想坚持询问是否可以优化字符串容量的问题?)

1 个答案:

答案 0 :(得分:4)

如果您要求如何缩减capacity()以使其与size()匹配,那么C ++ 11为此目的添加了shrink_to_fit(),但要注意它是非绑定请求,因此允许实现忽略它。

name0.shrink_to_fit();

或者有创建临时字符串和交换的技巧:

std::string(name0.begin(), name0.end()).swap(name0);

但是,这些都不能保证为您提供与capacity()匹配的size()。来自GotW #54

  

某些实现可能会选择将容量略微舍入到下一个较大的内部“块大小”,结果是容量实际上最终略大于大小。