1. Мы можем построить вектор для хранения группы строк, написав вектор, но строка может иметь переменную длину, как с этим справиться вектор?
  2. Я также тестирую демо, тест [0] начинается с 0x2508cb0, тест [1] начинается с 0x2508cb8, но разница двух адресов и емкость теста [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;

}

Выход:

12
18
0x2508cb0
0x2508cb8

1
Yetionyo 11 Ноя 2017 в 22:11

1 ответ

Лучший ответ

Вектор не должен иметь дело с этим, потому что строка имеет дело с этим. Как и std::vector, std::string хранит свои элементы в динамически выделяемой памяти. Символы не являются частью самого строкового объекта (за исключением случая оптимизации небольших строк), а вместо этого просто упоминаются через указатель. Фактический размер строкового объекта устанавливается во время компиляции и одинаков для всех строк (и может быть получен с помощью sizeof(std::string)), независимо от количества символов.

5
Benjamin Lindley 11 Ноя 2017 в 19:14