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

The*_*tMe 3 c++ vector

我想初始化一个包含指向课程的指针的向量向量。我声明了这一点:

std::vector<std::vector<Course*> > *CSPlan = 
        new std::vector<std::vector<Course*> >(smsNum);
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

  1. 主向量和内部向量都分配在堆上吗?还是只有 MAIN 向量位于堆上,而其索引是指向堆栈上其他较小向量的指针?

  2. 我声明它的大小int smsNum,因此主向量的大小为 10,但是较小的向量呢?它们也是这样的大小还是仍然充满活力?

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

Rub*_*ens 5

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

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

for (i = 0; i < your_value; i++) {
    vector.insert(...);
}
Run Code Online (Sandbox Code Playgroud)

考虑到your_value从标准输入读取的整数,编译器无法控制向量有多大,即,它不知道可以执行的最大插入量是多少。

为了解决这个问题,必须在堆上分配该结构,考虑到主内存和交换,它可以在操作系统允许的情况下增长到尽可能大的程度。作为补充,如果您使用指向向量的指针,则只需动态分配一个变量来引用该向量即可。这并没有改变向量的内容必然被分配在堆上的事实。

你的堆栈中将有:

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

在你的堆中:

  • 变量“y”的值,它是对向量向量的引用;

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