【问题标题】:Why does std queue not define a swap method specialisation为什么 std queue 没有定义交换方法专业化
【发布时间】:2009-06-02 01:50:52
【问题描述】:

我读过所有 stl 容器都提供了交换算法的专门化,以避免调用默认方法使用的复制构造函数和两个赋值操作。但是,当我认为在我正在处理的某些代码中使用队列会很好时,我注意到(与向量和双端队列不同)队列不提供这种方法?我刚刚决定使用双端队列而不是队列,但我仍然想知道这是为什么?

【问题讨论】:

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


    【解决方案1】:

    C++0x 将交换添加到容器适配器,如 std::queue。我只能推测为什么当前标准中缺少它。 在this discussion 有人提出了一种解决方法:

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

    【讨论】:

    • 问题是“它丢失有什么原因吗?”
    【解决方案2】:

    我敢肯定他们是疏忽而被排除在外的。平心而论,我经常使用 std::queue 和 std::stack 并且从来不需要交换两个。我认为您使用双端队列而不是队列很好。像typedef std::deque<MyType> QueueType 这样的东西应该足以暗示应该如何使用容器。

    【讨论】:

    • 我维护了两组需要处理的元素,当前组和下一轮要处理的组,所以我需要在最后交换填充的 nextQueue 代替耗尽的 currentQueue每一轮。严格来说,它们根本不必是队列……实际上它们可能只是向量……嗯
    • 您是否考虑过使用两个指向队列的指针,然后交换它们?
    • @rlbond 当正确定义交换方法时,容器只是交换它们的内部指针,所以它实际上是同一件事......我讨厌使用 vector* vec = new vector(bar);我只是觉得它很丑:)
    • @Jamie 你实际上不必这样做,你可以说 vector a, b;矢量* 当前 = &a;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2018-12-18
    • 2018-10-08
    • 2014-10-19
    • 2015-04-02
    相关资源
    最近更新 更多