向量和堆栈之间的主要区别是什么?

Aqu*_*irl 21 c++ containers stl

两者都像堆栈一样.两者都有推送和弹出操作.

一些内存布局有区别吗?

iam*_*ind 17

std::vector有几个可访问性和修改操作相比std::stack.如果是std::stack,您可能只需要以系统的方式执行操作,您可以push()在最后一个元素或pop()最后一个元素之上.

std::vector在这种意义上,它具有更多的灵活性,它有多个操作,您可以insert()在两者之间或erase()之间.

重点是,std :: stack需要提供底层容器.默认情况下std::deque,它可以是std::vector或者std::list也可以.
另一方面,std::vector保证是一个可以使用的连续数组operator [].

  • @AnishaKaul,这是因为*default*它是,`template <class T,class Container = deque <T>> class stack;`.因此,如果您不提供任何容器,则假定它为`std :: deque`.有关详细信息,请参阅我在答案中发布的链接. (3认同)

Mik*_*Mik 13

我不知道所有的实施细节,但根据这个,栈是一个容器适配器.它确保底层容器(可以是向量,列表或双端队列)作为堆栈工作,即仅允许推送和弹出,而不是随机访问.

因此,向量可以作为堆栈工作,但堆栈不能用作向量,因为您无法在随机位置插入或获取元素.


Pet*_*der 9

stack是一堆.它只能推动和弹出.A vector可以做其他事情,比如插入中间.这增加了灵活性,但减少了保证.

例如,对于堆栈,如果您将A然后B推到后面,那么您可以保证它们将按顺序B移除,然后A. vector不保证.