У меня есть сомнения по поводу использования 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
объект?
Надеюсь, я объяснил свои сомнения.
Спасибо за ваше время.
Нет, твой obj
Переменная никогда не перераспределяется, потому что члены внутри нее меняются. Вектор имеет свои собственные указатели на свои данные и обрабатывает все свои собственные распределения и перераспределения внутри.
Подумайте об этом так: обычно локальные переменные (включая полные структуры и массивы) помещаются в стек текущей функции. Компилятор обращается к этим переменным через смещение от базового адреса. Если бы компилятор (или система) внезапно начал перемещать переменные в памяти, это усложнило бы доступ к переменным значительно а также значительно влияет на скорость выполнения и эффективность вашей программы. Таким образом, локальные переменные находятся в стеке и остаются там, где их поместил компилятор. Данные, размещенные в куче (например, данные внутри std::vector
) можно легко перемещать, поскольку все, что должно быть обновлено в указателе на данные, и, как я уже говорил, все это обрабатывается внутренне в векторном объекте, так что в любом случае вы ничего не заметите.
Других решений пока нет …