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

时间:2017-11-11 19:11:28

标签: c++ vector

  1. 我们可以通过编写vector来构造一个存储一串字符串的向量,但是一个字符串可以是可变长度的,vector如何处理它呢?
  2. 我也测试了一个demo,test [0]以0x2508cb0开头,test [1]以0x2508cb8开头,但是两个地址的diff和test [0]的容量似乎不一样。
  3. 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;
    

    }

    输出:

    12
    18个
    0x2508cb0
    0x2508cb8

1 个答案:

答案 0 :(得分:5)

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