我想初始化一个包含指向课程的指针的向量向量。我声明了这一点:
std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);
Run Code Online (Sandbox Code Playgroud)
我想要做的是拥有一个向量向量,每个内部向量都是一个包含指向 Courses 的指针的向量,并且我希望 MAIN 向量的大小为int smsNum。此外,我希望它在堆上。
我的问题是:
主向量和内部向量都分配在堆上吗?还是只有 MAIN 向量位于堆上,而其索引是指向堆栈上其他较小向量的指针?
我声明它的大小int smsNum,因此主向量的大小为 10,但是较小的向量呢?它们也是这样的大小还是仍然充满活力?
我的最终目标是拥有一个向量的向量,主向量和堆上的子向量,并且只有主向量的大小为 smsNum,而其余向量都是动态的。
任何可以增长到用户想要的大小的结构都将在堆上分配。另一方面,内存堆栈用于分配静态分配的变量,程序在编译过程中静态控制大小。
因为你可以有这样的循环:
for (i = 0; i < your_value; i++) {
vector.insert(...);
}
Run Code Online (Sandbox Code Playgroud)
考虑到your_value从标准输入读取的整数,编译器无法控制向量有多大,即,它不知道可以执行的最大插入量是多少。
为了解决这个问题,必须在堆上分配该结构,考虑到主内存和交换,它可以在操作系统允许的情况下增长到尽可能大的程度。作为补充,如果您使用指向向量的指针,则只需动态分配一个变量来引用该向量即可。这并没有改变向量的内容必然被分配在堆上的事实。
你的堆栈中将有:
在你的堆中:
变量“y”的值,它是对向量向量的引用;
向量向量的内容(由“y”访问,由“x”访问)。