我想初始化包含指向课程指针的向量向量。我宣布了这个:
std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);
我想要做的是拥有一个向量向量,每个向量内部都是一个包含指向Courses的指针的向量,我希望MAIN向量的大小为int smsNum
。此外,我希望它在堆上。
我的问题是:
是否在堆上分配了主要向量和内部向量?或者只是MAIN向量在堆上,它的'索引是指向堆栈上其他较小向量的指针?
我声明它的大小为int smsNum
所以主矢量的大小为10,但是较小的矢量呢?他们是那么大还是仍然充满活力?
我的目标最终是拥有一个向量矢量,包括主矢量和堆上的子矢量,而且只有主矢量的大小为smsNum,而其余的是动态的。
答案 0 :(得分:4)
任何可以增长到用户想要的结构的结构都将在堆上分配。另一方面,内存堆栈用于分配静态分配的变量,程序在编译过程中可以静态控制大小。
因为你可以有这样的循环:
for (i = 0; i < your_value; i++) {
vector.insert(...);
}
将your_value
视为从标准输入读取的整数,编译器无法控制向量的大小,即,它不知道您可以执行的最大插入量是多少。 / p>
要解决这个问题,必须在堆上分配结构,它可能会增加操作系统允许的大小 - 考虑主内存和交换。作为补充,如果使用指向向量的指针,您将简单地动态分配变量以引用向量。这改变了 NOT 这个事实,即向量的内容必然是在堆上分配的。
你将拥有,在你的堆栈中:
在你的堆里:
变量“y”的值,即对矢量矢量的引用;
矢量矢量的内容(由“y”访问,由“x”访问)。