当使用std::string
对象,我想向其中添加字符,它会预先分配一些内存,还是只分配我需要的内存?
准确地说:
std::string s;
s.reserve(20);
char c = 'a';
s = "";
for(int i = 0; i < 25; i++)
s += c;
在上面的示例中,我保留了一定量的内存。现在当我清除字符串时,是否会导致保留的内存被丢弃?
在循环中,它会填满保留的内存,然后每次重新分配额外的 5 个字符吗?
没有要求std::string
当您为其分配空字符串时,释放分配的内存。当您为其分配一个短字符串时也不会。唯一的要求是,当它分配内存来保存较大的字符串时,分配必须以实现摊余常量时间的方式完成。一个简单的实现是每次需要更多空间时就增长 2 倍。
如果您希望最小化字符串的容量,您可以使用string::shrink_to_fit()
在 C++11 中。在 C++11 之前,一些人在需要减少容量时诉诸“交换技巧”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)