c ++字符串中"size"和"capacity"的区别?

zer*_*d0l 4 c++ string stl

我有来自Thinking in C++的这个片段.

#include <iostream>
#include <string>

int main ()
{
string bigNews("I saw Elvis in a UFO. ");
cout << bigNews << endl;
 bigNews.insert(0, " thought I ");
cout << bigNews << endl;
cout << "Size = " << bigNews.size() << endl;
cout << "Capacity = "
<< bigNews.capacity() << endl;
bigNews.append("I've been working too hard.");
cout << bigNews << endl;
cout << "Size = " << bigNews.size() << endl;
cout << "Capacity = "
<< bigNews.capacity() << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到如下所示的输出:

I saw Elvis in a UFO. 
 thought I I saw Elvis in a UFO. 
Size = 33
Capacity = 44
 thought I I saw Elvis in a UFO. I've been working too hard.
Size = 60
Capacity = 88
Run Code Online (Sandbox Code Playgroud)

我可以弄清楚为什么尺寸会增加,但我无法弄清楚容量如何增加?

我所知道的是容量是我们可以推送的字符串缓冲区,但是如何分配空间?

Chr*_*yes 8

capacity是字符串当前可以保持而不必增长的最大字符数.size是字符串中实际存在多少个字符.它们是独立概念的原因是分配内存通常是低效的,因此您尝试通过获取比实际需要的内存更多的内存来尽可能少地分配.(许多数据结构使用"加倍"方法,如果它们达到其容量N并需要更多空间,它们将分配2*N空间,以避免在任何时候很快再次重新分配.)

capacity当您使用字符串并需要更多空间时,它将自动增加.您也可以使用该reserve功能手动增加它.