вектор c ++ внутри структуры

У меня есть сомнения по поводу использования std::vector,
Если бы я получил структуру с std::vector объект с неопределенным пространством в памяти, если это необходимо перераспределить ( std::vector), структура также перераспределена? или только std::vector?

Например:

struct cluster{
int a;
int b;
struct cluster* parent;
vector<struct cluster> children;
}

struct cluster obj = {2,1,...};

struct cluster *pobj = &obj;

for(int i = 0; i < 100 ; i ++){
children.push_back(i); //The capacity will be increased progressly, no?
}

Итак, вопрос: pobj==&obj в конце for цикл? Или obj перераспределен из-за перераспределения ребенка std::vector объект?

Надеюсь, я объяснил свои сомнения.
Спасибо за ваше время.

4

Решение

Нет, твой obj Переменная никогда не перераспределяется, потому что члены внутри нее меняются. Вектор имеет свои собственные указатели на свои данные и обрабатывает все свои собственные распределения и перераспределения внутри.

Подумайте об этом так: обычно локальные переменные (включая полные структуры и массивы) помещаются в стек текущей функции. Компилятор обращается к этим переменным через смещение от базового адреса. Если бы компилятор (или система) внезапно начал перемещать переменные в памяти, это усложнило бы доступ к переменным значительно а также значительно влияет на скорость выполнения и эффективность вашей программы. Таким образом, локальные переменные находятся в стеке и остаются там, где их поместил компилятор. Данные, размещенные в куче (например, данные внутри std::vector) можно легко перемещать, поскольку все, что должно быть обновлено в указателе на данные, и, как я уже говорил, все это обрабатывается внутренне в векторном объекте, так что в любом случае вы ничего не заметите.

7

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

Других решений пока нет …

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