Как C ++ вычисляет адрес смещения, когда я объявляю массив строк

Хотя строка является динамической, поэтому она не будет иметь определенного размера, поэтому, когда я получу s [1] перед s [0], как C ++ вычислит свой адрес смещения.

Например, int a [2]

0000:1000    a[0]
0000:1004    a[1]

Программа:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
string s[2];

cin>>s[1];
cout<<s[1]<<endl;

cin>>s[0];
cout<<s[0]<<endl;
}

3

Решение

Массив строк — это массив строковых объектов, которые имеют фиксированный размер и эффективно содержат указатели в другом месте, где струны на самом деле проживают.

7

Другие решения

std::string не в своей структуре памяти фактически содержит его символы. Он просто содержит указатель на динамически выделяемую память и отслеживает ее размер. Как std::vector на самом деле не хранит свои элементы внутри своих членов. Вместо этого он имеет указатель на фактические элементы, расположенные «в куче». S

Таким образом, независимо от количества символов в строке, ее размер (значение sizeof (std::string) ) является постоянной времени компиляции.

6

По вопросам рекламы [email protected]