std :: vector如何处理变长std :: string?

Yet*_*nyo 1 c++ vector

  1. 我们可以通过编写vector来构造一个存储一串字符串的向量,但是一个字符串可以是可变长度的,矢量如何处理呢?
  2. 我还测试一个演示,测试[0]与0x2508cb0开始,测试[1]与0x2508cb8开始,但两个地址的diff和测试的容量[0]似乎是不一样的.

int main(){

vector<string> test;
test.push_back("tes3235235et");
test.push_back("135125151241241241");
cout << test[0].capacity() << endl;
cout << test[1].capacity() << endl;
cout << &(test[0]) << endl;
cout << &(test[1]) << endl;
return 0;
Run Code Online (Sandbox Code Playgroud)

}

输出:

12
18
0x2508cb0
0x2508cb8

Ben*_*ley 5

向量不需要处理它,因为字符串处理它.就像std::vector,std::string存储其在动态分配的内存单元.字符不是字符串对象本身的一部分(除了小字符串优化的情况),而是通过指针引用.字符串对象的实际大小在编译时设置,并且对于所有字符串都是相同的(并且可以通过获得sizeof(std::string)),无论字符数是多少.