std::array<T,N>:: swap
From cppreference.net
|
void
swap
(
array
&
other
)
noexcept
(
/* see below */
)
;
|
(C++11 이후)
(C++20 이후 constexpr) |
|
컨테이너의 내용을 other 와 교환합니다. 반복자와 참조가 다른 컨테이너와 연관되지 않도록 합니다.
목차 |
매개변수
| other | - | 내용을 교환할 대상 컨테이너 |
반환값
(없음)
예외
|
noexcept
명세:
noexcept
(
noexcept
(
swap
(
std::
declval
<
T
&
>
(
)
,
std::
declval
<
T
&
>
(
)
)
)
)
위 표현식에서
|
(C++17 이전) |
|
noexcept
명세:
noexcept
(
std::
is_nothrow_swappable_v
<
T
>
)
|
(C++17 이후) |
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'; // swap 이후에도 반복자와 참조는 원래의 배열과 계속 연관되어 있음에 주목 // 예: `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
알고리즘을 특수화함
(함수 템플릿) |