在C ++中,STL向量是一个动态数组,但它执行的操作类似于堆栈。那么任何人都可以判断数据是存储在堆栈还是堆段中。
答案 0 :(得分:3)
std::vector
本身并没有定义它所使用的内存是如何分配的。它通过Allocator对象进行内存分配。
默认情况下,vector<T>
将使用std::allocator<T>
来处理分配。反过来,它将使用operator new
和operator delete
来分配/删除内存。
这些都可以改变 - 分配器的类型作为模板参数传递给vector
,所以如果你想写一个不同分配的Allocator类,你完全是自由地做到这一点。假设它满足分配器的要求,则可以创建使用分配器而不是默认分配器的std::vector
实例。
您还可以逐个类和/或全局地为operator new
和operator delete
提供替换。如果这样做,std::allocator<T>
将使用您的分配/删除例程,而不是标准库中定义的例程。
答案 1 :(得分:0)
它将它的元素存储在堆上的连续块中。它可以在本地创建或动态分配。最后,即使是简单的c风格数组也可以用作堆栈。
答案 2 :(得分:0)
存储在Vector中的任何内容都存储在堆中的连续内存中。 它也不是设计用作堆栈,虽然你可以用它来实现堆栈操作,在这种情况下使用实际的堆栈实现(可能)更有效率。*
值得注意的是,Vector的内存可以更改,因为添加或删除元素会导致它重新分配内存。
*如果您预先预先分配内存,那么堆栈的大多数实现都将与其他任何实现一样高效。
答案 3 :(得分:0)
&#34;
vector<Type> vect;
将在堆栈上分配向量(即标题信息),但在免费商店中分配元素(&#34;堆&#34;)。
vector<Type> *vect = new vector<Type>;
在免费商店分配所有内容。
vector<Type*> vect;
将在堆栈上分配向量并在免费存储上分配一堆指针,但这些点由您如何使用它们确定(您可以将元素0指向自由存储,将元素1指向堆栈,比如说) &#34;
你的问题由larsmans在7-11-11回答。欢迎你。