命名空间
变体
操作

std::swap(std::queue)

来自 cppreference.com
< cpp‎ | container‎ | queue
在头文件 <queue> 中定义
template< class T, class Container >

void swap( std::queue<T, Container>& lhs,

           std::queue<T, Container>& rhs );
(自 C++11 起)
(直到 C++17)
template< class T, class Container >

void swap( std::queue<T, Container>& lhs,
           std::queue<T, Container>& rhs )

               noexcept(/* 见下文 */);
(自 C++17 起)
专门化了 std::swap 算法以用于 std::queue。交换 lhsrhs 的内容。调用 lhs.swap(rhs).

仅当 std::is_swappable_v<Container>true 时,此重载才参与重载解析。

(自 C++17 起)

内容

[编辑] 参数

lhs, rhs - 要交换内容的容器

[编辑] 返回值

(无)

[编辑] 复杂度

与交换底层容器相同。

异常

noexcept 规范:  
noexcept(noexcept(lhs.swap(rhs)))
(自 C++17 起)

注释

虽然容器适配器的 std::swap 重载是在 C++11 中引入的,但容器适配器在 C++98 中也可以通过 std::swap 进行交换。对 std::swap 的此类调用通常具有线性时间复杂度,但可能会提供更好的复杂度。

[编辑] 示例

#include <algorithm>
#include <iostream>
#include <queue>
 
int main()
{
    std::queue<int> alice;
    std::queue<int> bob;
 
    auto print = [](const auto& title, const auto& cont)
    {
        std::cout << title << " size=" << cont.size();
        std::cout << " front=" << cont.front();
        std::cout << " back=" << cont.back() << '\n';
    };
 
    for (int i = 1; i < 4; ++i)
        alice.push(i);
    for (int i = 7; i < 11; ++i)
        bob.push(i);
 
    // Print state before swap
    print("Alice:", alice);
    print("Bobby:", bob);
 
    std::cout << "-- SWAP\n";
    std::swap(alice, bob);
 
    // Print state after swap
    print("Alice:", alice);
    print("Bobby:", bob);
}

输出

Alice: size=3 front=1 back=3
Bobby: size=4 front=7 back=10
-- SWAP
Alice: size=4 front=7 back=10
Bobby: size=3 front=1 back=3

[编辑] 另请参阅

(C++11)
交换内容
(公共成员函数) [编辑]