如何在内存中存储vector <string>

Fre*_*oul 5 c++ memory

我正在开展一个项目,我绝对需要在内存中连续存储数据.我想存储一些(最多100个)字符串(我不知道每个字符串的实际大小).所以我将创建一个包含100个元素的字符串向量.

std::vector<std::string> vect;
vect.reserve(100)
Run Code Online (Sandbox Code Playgroud)

但是String可以是任何大小的.那么它是怎样工作的?每次更改字符串时,我的矢量是否重新分配?或者是一个std :: string就像一个指向字符串第一个字符的指针,就像一个char*将是一个C字符串?

Man*_*dis 8

  1. 每个string都是类的实例,string该实例将包含一个char*.
  2. string向量中的对象将位于连续的内存中.
  3. 每个人的字符string都会在连续的记忆中
  4. 除非您std::allocator为字符串定义自定义,否则所有字符串的字符都不会在连续的内存中
  5. 当您增加vector或调用的大小时,字符串的内存中的位置可能会更改shrink_to_fit
  6. string当你增加每个字符的大小时,每个字符的内存中的位置可能会改变string
  7. vector如果您修改或删除其中一个字符串,则不会重新分配
  8. 有一种叫做小字符串优化的东西.如果它发挥作用,每个的字符string将存储在string而不是指向的另一个位置char*

  • @FreeYourSoul 它有更多的东西,比如容量和大小,而不仅仅是“char *”。 (2认同)