在堆栈或堆中分配的vector <int> a [n]?声明向量<vector <int>&gt; a(n)和向量<int> a [n]之间的差异?

时间:2017-09-07 18:21:39

标签: c++ arrays vector

当我声明vector&lt;矢量&lt; INT&GT;&GT; a(n),内存在堆中分配,而当我声明它的向量&lt; INT&GT; a [n],它在堆栈上分配。但为什么?不是第二个意味着方式 - a [i]是指向第i个向量的指针,因为向量是在堆中动态分配的,因此整个分配应该在堆中。不是吗?

如果我错了,你能解释一下吗?

2 个答案:

答案 0 :(得分:4)

vector<int> adj[n];

这不是合法的C ++代码,不允许你像这样在堆栈上声明一个动态大小的数组。

这也可能是导致问题的原因,因为在堆栈上进行如此庞大的分配可能会导致一些重大问题。

您应该使用以下内容:

vector<vector<int>> adj(n);

答案 1 :(得分:0)

如上所述,

vector<int> adj[n];

不是标准的C ++,但有些编译器(GCC)允许它作为扩展。

然而,在堆栈上创建了这样的数组,你可能会看到堆栈溢出(双关语) - 堆栈通常比堆内存小得多。

相关问题