Namespaces
Variants

std::list<T,Allocator>:: swap

From cppreference.net

void swap ( list & other ) ;
(C++17 前)
void swap ( list & other ) noexcept ( /* 见下文 */ ) ;
(C++17 起)
(C++26 起为 constexpr)

交换容器的内容与 other 的内容。不会对单个元素调用任何移动、复制或交换操作。

所有迭代器和引用保持有效。未指定在此容器中持有 end() 值的迭代器在操作后将引用此容器还是其他容器。

std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value true ,则通过非限定调用非成员函数 swap 来交换分配器。否则不交换分配器(且若 get_allocator ( ) ! = other. get_allocator ( ) ,则行为未定义)。

(since C++11)

目录

参数

其他 - 用于交换内容的容器

异常

(无)

(C++17 前)
noexcept 规范:
noexcept ( std:: allocator_traits < Allocator > :: is_always_equal :: value )
(C++17 起)

复杂度

常量。

示例

#include <iostream>
#include <list>
template<class Os, class Co>
Os& operator<<(Os& os, const Co& co)
{
    os << '{';
    for (const auto& i : co)
        os << ' ' << i;
    return os << " } ";
}
int main()
{
    std::list<int> a1{1, 2, 3}, a2{4, 5};
    auto it1 = std::next(a1.begin());
    auto it2 = std::next(a2.begin());
    int& ref1 = a1.front();
    int& ref2 = a2.front();
    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
    a1.swap(a2);
    std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n';
    // 注意交换后迭代器和引用仍与其原始元素保持关联,例如 it1 原本指向 'a1' 中值为 2 的元素,
    // 交换后仍指向同一元素,尽管该元素已被移动到 'a2' 中。
}

输出:

{ 1 2 3 } { 4 5 } 2 5 1 4
{ 4 5 } { 1 2 3 } 2 5 1 4

参见

特化 std::swap 算法
(函数模板)