我想初始化一个向量向量,其中包含指向课程的指针。我宣布:
std::vector<std::vector<Course*> > *CSPlan =
new std::vector<std::vector<Course*> >(smsNum);我想这样做的是有一个向量向量,每个向量内部都是一个包含指向课程的指针的向量,我希望主向量的大小是int smsNum。而且,我想把它放在堆里。
我的问题是:
int smsNum,所以主向量的大小是10,但是更小的向量呢?它们也是这样大小的,还是仍然是动态的?我的最终目标是在堆中有一个向量向量,包括主向量和子向量,只有主向量大小为smsNum,而其余向量是动态的。
发布于 2012-11-18 12:16:04
任何可以按照用户希望的大小增长的结构都将在堆上分配。另一方面,内存堆栈用于分配静态分配的变量,程序在编译过程中静态地控制大小。
因为您可以有这样的循环:
for (i = 0; i < your_value; i++) {
vector.insert(...);
}考虑到your_value是从标准输入读取的整数,编译器无法控制向量的大小,也就是说,它不知道可以执行的最大插入量是多少。
要解决这个问题,必须在堆上分配结构,在堆中,它可以在操作系统允许的范围内增长--考虑主内存和交换。作为补充,如果使用指向向量的指针,则只需动态分配变量来引用向量。这改变了,而不是,即必须在堆上分配向量的内容。
你会,在你的堆栈里:
在你的堆里:
https://stackoverflow.com/questions/13439954
复制相似问题