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

Can std::string capacity be changed for optimisation?

本文关键字:优化 容量 string std 是否      更新时间:2023-10-16

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

例如:

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

对于内存中的几个字符串来说,这是完全没问题的,但如果有数千个呢?这浪费了大量内存。那么使用char*不是更好吗?这样您就可以控制为特定字符串分配多少内存?

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

如果你在问如何减少capacity()以使其匹配size(),那么c++ 11为此目的添加了shrink_to_fit(),但请注意这是一个非绑定请求,因此允许实现忽略它。

name0.shrink_to_fit();

或者创建一个临时字符串并交换:

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

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

一些实现可能会选择将容量四舍五入到下一个更大的内部"块大小",其结果是容量实际上最终比大小略大。