向量,堆与堆栈的向量(C ++)

时间:2012-11-18 12:07:39

标签: c++ vector

我想初始化包含指向课程指针的向量向量。我宣布了这个:

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

我想要做的是拥有一个向量向量,每个向量内部都是一个包含指向Courses的指针的向量,我希望MAIN向量的大小为int smsNum。此外,我希望它在堆上。

我的问题是:

  1. 是否在堆上分配了主要向量和内部向量?或者只是MAIN向量在堆上,它的'索引是指向堆栈上其他较小向量的指针?

  2. 我声明它的大小为int smsNum所以主矢量的大小为10,但是较小的矢量呢?他们是那么大还是仍然充满活力?

  3. 我的目标最终是拥有一个向量矢量,包括主矢量和堆上的子矢量,而且只有主矢量的大小为smsNum,而其余的是动态的。

1 个答案:

答案 0 :(得分:4)

任何可以增长到用户想要的结构的结构都将在堆上分配。另一方面,内存堆栈用于分配静态分配的变量,程序在编译过程中可以静态控制大小。

因为你可以有这样的循环:

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

your_value视为从标准输入读取的整数,编译器无法控制向量的大小,即,它不知道您可以执行的最大插入量是多少。 / p>

要解决这个问题,必须在堆上分配结构,它可能会增加操作系统允许的大小 - 考虑主内存和交换。作为补充,如果使用指向向量的指针,您将简单地动态分配变量以引用向量。这改变了 NOT 这个事实,即向量的内容必然是在堆上分配的。

你将拥有,在你的堆栈中:

  • 变量“x”,用于存储变量“y”的地址;

在你的堆里:

  • 变量“y”的值,即对矢量矢量的引用;

  • 矢量矢量的内容(由“y”访问,由“x”访问)。