std::array<T,N>::swap
void swap( array& other ) noexcept(/* see below */); |
(C++11 起) (C++20 前) |
|
constexpr void swap( array& other ) noexcept(/* see below */); |
(C++20 起) | |
将容器内容与 other
的内容交换。不导致迭代器和引用关联到别的容器。
参数
other | - | 要与之交换内容的 array
|
返回值
(无)
异常
noexcept 规定:
noexcept(noexcept(swap(std::declval<T&>(), std::declval<T&>()))) 在以上表达式中,按照同 C++17 std::is_nothrow_swappable 特性所用的行为查找标识符 |
(C++17 前) |
noexcept 规定:
noexcept(std::is_nothrow_swappable_v<T>) |
(C++17 起) |
array
, noexcept 规定:
noexcept
复杂度
与容器大小成线性。
示例
运行此代码
#include <array> #include <iostream> template<class Os, class V> Os& operator<<(Os& os, const V& v) { os << "{"; for (auto i : v) os << ' ' << i; return os << " } "; } int main() { std::array<int, 3> a1{1, 2, 3}, a2{4, 5, 6}; auto it1 = a1.begin(); auto it2 = a2.begin(); int& ref1 = a1[1]; int& ref2 = a2[1]; std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n'; a1.swap(a2); std::cout << a1 << a2 << *it1 << ' ' << *it2 << ' ' << ref1 << ' ' << ref2 << '\n'; // 注意交换后迭代器与引用保持与原 array 关联, // 例如 `it1` 仍指向元素 a1[0] , `ref1` 仍指代 a1[1] 。 }
输出:
{ 1 2 3 } { 4 5 6 } 1 4 2 5 { 4 5 6 } { 1 2 3 } 4 1 5 2
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2456 | C++11 | noexcept 规定曾为谬构
|
使之有效 |
参阅
(C++11) |
特化 std::swap 算法 (函数模板) |