首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量向量,堆对堆栈(C++)

向量向量,堆对堆栈(C++)
EN

Stack Overflow用户
提问于 2012-11-18 12:07:39
回答 1查看 1.1K关注 0票数 3

我想初始化一个向量向量,其中包含指向课程的指针。我宣布:

代码语言:javascript
复制
std::vector<std::vector<Course*> > *CSPlan = 
        new std::vector<std::vector<Course*> >(smsNum);

我想这样做的是有一个向量向量,每个向量内部都是一个包含指向课程的指针的向量,我希望主向量的大小是int smsNum。而且,我想把它放在堆里。

我的问题是:

  1. 主向量和内部向量都分配到堆上了吗?还是只有主向量在堆上,它的索引是指向堆栈中其他较小向量的指针?
  2. 我宣布它的大小是int smsNum,所以主向量的大小是10,但是更小的向量呢?它们也是这样大小的,还是仍然是动态的?

我的最终目标是在堆中有一个向量向量,包括主向量和子向量,只有主向量大小为smsNum,而其余向量是动态的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-18 12:16:04

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

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

代码语言:javascript
复制
for (i = 0; i < your_value; i++) {
    vector.insert(...);
}

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

要解决这个问题,必须在堆上分配结构,在堆中,它可以在操作系统允许的范围内增长--考虑主内存和交换。作为补充,如果使用指向向量的指针,则只需动态分配变量来引用向量。这改变了,而不是,即必须在堆上分配向量的内容。

你会,在你的堆栈里:

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

在你的堆里:

  • 变量"y“的值,即对向量向量的引用;
  • 向量向量的内容(由"y“访问,由”x“访问)。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13439954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档