当我声明vector<矢量< INT>> a(n),内存在堆中分配,而当我声明它的向量< INT> a [n],它在堆栈上分配。但为什么?不是第二个意味着方式 - a [i]是指向第i个向量的指针,因为向量是在堆中动态分配的,因此整个分配应该在堆中。不是吗?
如果我错了,你能解释一下吗?
答案 0 :(得分:4)
vector<int> adj[n];
这不是合法的C ++代码,不允许你像这样在堆栈上声明一个动态大小的数组。
这也可能是导致问题的原因,因为在堆栈上进行如此庞大的分配可能会导致一些重大问题。
您应该使用以下内容:
vector<vector<int>> adj(n);
答案 1 :(得分:0)
如上所述,
vector<int> adj[n];
不是标准的C ++,但有些编译器(GCC)允许它作为扩展。
然而,在堆栈上创建了这样的数组,你可能会看到堆栈溢出(双关语) - 堆栈通常比堆内存小得多。