【发布时间】:2009-06-02 01:50:52
【问题描述】:
我读过所有 stl 容器都提供了交换算法的专门化,以避免调用默认方法使用的复制构造函数和两个赋值操作。但是,当我认为在我正在处理的某些代码中使用队列会很好时,我注意到(与向量和双端队列不同)队列不提供这种方法?我刚刚决定使用双端队列而不是队列,但我仍然想知道这是为什么?
【问题讨论】:
标签: c++ stl queue swap stl-algorithm
我读过所有 stl 容器都提供了交换算法的专门化,以避免调用默认方法使用的复制构造函数和两个赋值操作。但是,当我认为在我正在处理的某些代码中使用队列会很好时,我注意到(与向量和双端队列不同)队列不提供这种方法?我刚刚决定使用双端队列而不是队列,但我仍然想知道这是为什么?
【问题讨论】:
标签: c++ stl queue swap stl-algorithm
C++0x 将交换添加到容器适配器,如 std::queue。我只能推测为什么当前标准中缺少它。 在this discussion 有人提出了一种解决方法:
有一个解决方案,因为标准保护了所需的部分, 称为继承。 [只是不要通过 std 适配器破坏] 创建一个继承所需适配器的模板结构,只提供 构造函数并将 args 转发给适配器类,编写一个 交换成员很容易,因为所需的项目是受保护的成员 标准适配器。
【讨论】:
我敢肯定他们是疏忽而被排除在外的。平心而论,我经常使用 std::queue 和 std::stack 并且从来不需要交换两个。我认为您使用双端队列而不是队列很好。像typedef std::deque<MyType> QueueType 这样的东西应该足以暗示应该如何使用容器。
【讨论】: