更改向量<string>中字符串的大小

Luk*_*ndt 2 c++ stl

当一个或多个元素改变大小时,矢量会发生什么?

详细说明,

#include <string>
#include <vector>
using namespace std;
int main() {
    vector<string> v;
    v.push_back("first string");
    v.push_back("2nd string");
    v[0] += " has increased in size";
}
Run Code Online (Sandbox Code Playgroud)

在"v [0] + = ......"会发生什么?是否会进行大规模重新分配,以保持字符串和向量中的内存连续?

das*_*ght 6

不会有内存重新分配vector,并且几乎可以肯定会重新分配string,尽管标准没有说明这一点.字符串就像一个向量,它将内容与字符串对象本身分开.


Lil*_*ard 5

No. string将实际字符串数据存储在单独分配的内存中(模数短字符串优化).对象的实际大小永远不会改变,并且在编译时是固定的.任何这样的动态大小调整都是使用单独分配的内存或对象的层次结构来完成的(例如,set/map使用节点树,list使用双链节点列表等).