为什么std队列没有定义交换方法专门化

时间:2009-06-02 01:50:53

标签: c++ stl queue swap stl-algorithm

我已经读过所有stl容器都提供了交换算法的特化,以避免调用复制构造函数和默认方法使用的两个赋值操作。但是,当我认为在我正在研究的某些代码中使用队列会很好的时候我注意到(与vector和deque不同)队列不提供这种方法吗?我只是决定使用deque而不是队列,但我仍然有兴趣知道为什么会这样?

2 个答案:

答案 0 :(得分:3)

C++0x会将交换添加到容器适配器,如std :: queue。我只能推测为什么它缺少现行标准。 在this discussion,有人建议采用解决方法:

  

有一个解决方案,因为该标准使所需的部件受到保护,    称为继承。 [只是不要通过std适配器破坏]    创建一个继承所需适配器的模板化结构,只提供    构造函数并将args转发到适配器类,编写一个    交换成员是一个快照,因为所需的项目是受保护的成员    标准适配器。

答案 1 :(得分:1)

我确信他们被排除在监督之外。平心而论,我使用了std :: queue和std :: stack,并且从未交换过两次。我认为你使用deque而不是队列是好的。像typedef std::deque<MyType> QueueType这样的东西应该足以提示如何使用容器。