Вектор векторов, куча против стека (C ++)

Я хотел инициализировать вектор векторов, которые содержат указатели на курсы. Я объявил это:

std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);

Я хотел сделать так, чтобы у него был вектор векторов, каждый внутренний вектор — это вектор, который содержит указатели на курсы, и я хотел, чтобы вектор MAIN имел размер int smsNum, Кроме того, я хотел это в куче.

Мои вопросы:

  1. Распределяются ли в куче как главный вектор, так и внутренние векторы? или это только вектор MAIN находится в куче, а его индексы являются указателями на другие меньшие векторы в стеке?

  2. Я объявил, что это имеет размер int smsNum так что главный вектор имеет размер 10, но как насчет меньших векторов? они тоже такого размера или все еще динамичны?

В итоге моя цель состоит в том, чтобы в куче был вектор векторов, и главный вектор, и дочерние векторы, и ТОЛЬКО главный вектор имеет размер smsNum, тогда как остальные являются динамическими.

2

Решение

Любая структура, которая может стать настолько большой, насколько этого хочет пользователь, будет размещена в куче. Стек памяти, с другой стороны, используется для выделения статически распределенных переменных, которые программа статически контролирует по размеру в процессе компиляции.

Так как вы можете иметь такой цикл:

for (i = 0; i < your_value; i++) {
vector.insert(...);
}

И учитывая your_value в качестве целочисленного значения, считанного из стандартного ввода, компилятор не контролирует, насколько большим будет ваш вектор, т.е. он не знает, какое максимальное количество вставок вы можете выполнить.

Чтобы решить эту проблему, структура должна быть размещена в куче, где она может вырасти настолько большой, насколько это позволяет ОС — с учетом основной памяти и подкачки. В качестве дополнения, если вы используете указатель на вектор, вы просто будете динамически размещать переменную для ссылки на вектор. Это изменения НЕ тот факт, что содержимое вектора обязательно размещается в куче.

В вашем стеке будет:

  • переменная «x», в которой хранится адрес переменной «y»;

И в твоей куче

  • значение переменной «y», которая является ссылкой на ваш вектор векторов;

  • содержимое вашего вектора векторов (доступ к которому осуществляется через «y», доступ к которому осуществляется через «x»).

4

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector