C ++:矢量标准模板库

时间:2014-09-17 12:28:15

标签: c++ vector stl stack dynamic-arrays

在C ++中,STL向量是一个动态数组,但它执行的操作类似于堆栈。那么任何人都可以判断数据是存储在堆栈还是堆段中。

4 个答案:

答案 0 :(得分:3)

std::vector本身并没有定义它所使用的内存是如何分配的。它通过Allocator对象进行内存分配。

默认情况下,vector<T>将使用std::allocator<T>来处理分配。反过来,它将使用operator newoperator delete来分配/删除内存。

这些都可以改变 - 分配器的类型作为模板参数传递给vector,所以如果你想写一个不同分配的Allocator类,你完全是自由地做到这一点。假设它满足分配器的要求,则可以创建使用分配器而不是默认分配器的std::vector实例。

您还可以逐个类和/或全局地为operator newoperator 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回答。欢迎你。