4

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

4

2 回答 2

3

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

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

于 2009-06-02T01:56:13.343 回答
1

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

于 2009-06-02T02:03:29.990 回答