C++ STL源码分析—queue和stack

本文探讨了C++ STL中的queue和stack,它们默认由deque实现,因此被视作容器适配器而非独立容器。queue和stack不允许遍历,不提供iterator。同时,用户可以选择其他容器作为底层实现,但需注意调用限制。当尝试调用未在底层容器中定义的函数时,可能导致运行时错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【侯捷-SL体系结构内核分析-queue和stack探索】

总结

  1. queue和stack底层默认是由deque实现,所有某种程度上queue和stack不被称为容器,而可以被称为容器queue的adapter。
template<class _Ty,
	class _Container = deque<_Ty> >
	class queue
	{	// FIFO queue implemented with a container
	...
	_NODISCARD bool empty() const
		{	// test if queue is empty
		return (c.empty());
		}

	_NODISCARD size_type size() const
		{	// return length of queue
		return (c.size());
		}

	_NODISCARD reference front()
		{	// return first element of mutable queue
		return (c.front());
		}

	_NODISCARD const_reference front() const
		{	// return first element of nonmutable queue
		return (c.front());
		}

	_NODISCARD reference back()
		{	// return last element of mutable queue
		return (c.back());
		}

	_NODISCARD const_reference back() const
		{	// return last element of nonmutable queue
		return (c.back());
		}

	void push(const value_type& _Val)
		{	// insert element at beginning
		c.push_back(_Val);
		}

	void pop()
		{	// erase element at end
		c.pop_front();
		}
	}

注:queue的源码分析详见我的这篇博客

  1. stack和queue都不允许遍历,所以也不提供相应的 iterator。

  2. stack和queue底层容器可以自行指定其他容器,可指定容器见下表。

stackquequ
deque(default)
list
vector×
map××
set××

注意,这里的不可以只是至局部调用不通过(编译器并不会检查到该错误)。当stack或queue转调用底部容器相应函数时,如果底部容器提供相应函数,则调用成功,否则就会调用出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值