命名空间
变体
操作

std::swap(std::stack)

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

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

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

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

               noexcept(/* 见下文 */);
(自 C++17 起)
专门化了 std::swap 算法,用于 std::stack。 交换 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 <stack>
 
int main()
{
    std::stack<int> alice;
    std::stack<int> bob;
 
    auto print = [](const auto& title, const auto& cont)
    {
        std::cout << title << " size=" << cont.size();
        std::cout << " top=" << cont.top() << '\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 top=3
Bobby: size=4 top=10
-- SWAP
Alice: size=4 top=10
Bobby: size=3 top=3

[编辑] 另请参阅

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