node-handle
|
template
<
/* unspecified */
>
class /*node-handle*/ ; |
(C++17부터)
( 설명 전용* ) |
|
node handle 은 associative containers 와 unordered associative containers 로부터 단일 요소의 소유권을 수락하는 객체입니다. 호환 가능한 노드를 가진 다른 컨테이너로 해당 소유권을 이전하는 데 사용될 수 있습니다.
노드 핸들에는 두 가지 가능한 상태가 있습니다:
- 컨테이너에서 추출된 요소를 참조하거나,
- 비어 있는 상태입니다.
노드 핸들이 비어 있지 않다면, 이전에 추출된 컨테이너의 할당자와 동일한 할당자를 포함합니다.
모든 맵 컨테이너(
std::map
,
std::multimap
,
std::unordered_map
, 그리고
std::unordered_multimap
)에서
key_type
이
Key
이고
mapped_type
이
T
인 경우,
std::
pair
<
Key, T
>
또는
std::
pair
<
const
Key, T
>
에 대한 사용자 정의 특수화가 존재할 때, 노드 핸들 관련 연산의 동작은 정의되지 않습니다.
중첩 타입
| 유형 | 정의 |
key_type
(맵 컨테이너 전용)
|
노드에 저장된 키 |
mapped_type
(맵 컨테이너 전용)
|
노드에 저장된 요소의 매핑된 부분 |
value_type
(셋 컨테이너 전용)
|
노드에 저장된 요소 |
allocator_type
|
요소를 파괴할 때 사용되는 할당자 |
container_node_type
|
미지정
( 설명 전용 멤버 유형* ) |
ator_traits
|
std::
allocator_traits
<
allocator_type
>
( 설명 전용 멤버 유형* ) |
다음을 참조하십시오: AssociativeContainer 및 UnorderedAssociativeContainer 에서 설명 전용이 아닌 중첩 타입들의 실제 정의를 확인할 수 있습니다.
데이터 멤버
| 멤버 | 설명 |
|
typename
ptr_
|
참조된 객체를 포함하는 컨테이너 노드에 대한 포인터
[1]
( 설명 전용 멤버 객체* ) |
std::
optional
<
allocator_type
>
alloc_
|
저장된 할당자
( 설명 전용 멤버 객체* ) |
- ↑ 요소를 추출하는 동안 가리키는 컨테이너 노드의 소유권은 이미 소스 컨테이너로부터 분리되었습니다. 소스 컨테이너의 수명이 종료되었더라도 컨테이너 노드와 포함된 요소는 여전히 접근 가능합니다.
멤버 함수
node-handle :: node-handle
|
constexpr
/*node-handle*/
(
)
noexcept
;
|
(1) | |
|
/*node-handle*/
(
/*node-handle*/
&&
other
)
noexcept
;
|
(2) | (constexpr since C++26) |
-
ptr_는 other.ptr_로 초기화됩니다. -
alloc_는 other.alloc_로부터 이동 생성됩니다. -
nullptr
을
other.
ptr_에 할당합니다. -
std::
nullopt
을
other.
ptr_에 할당합니다.
매개변수
| other | - | 다른 node handle |
참고 사항
사용자가 제공하는 복사 생성자는 없습니다.
node-handle
은
CopyConstructible
이 아닙니다.
이동 생성과 이동 할당 외에도, 비어 있지 않은
node-handle
은 (unordered) associative container의
extract
멤버 함수를 호출해서만 생성될 수 있습니다.
node-handle :: operator=
|
/*node-handle*/
&
operator
=
(
/*node-handle*/
&&
other
)
;
|
(constexpr since C++26) | |
이동 할당 연산자는 * this 의 상태를 other 의 상태로 이동 의미론을 사용하여 대체합니다.
-
만약
ptr_! = nullptr 가 true 인 경우,ator_traits :: destroy 를 호출하여 * this 가 참조하는 요소를 파괴한 후,ator_traits :: rebind_traits <container-node-type > :: deallocate 를 호출하여 참조된 요소의 저장 공간을 할당 해제합니다. -
other.
ptr_를ptr_에 할당합니다. -
만약
ator_traits :: propagate_on_container_move_assignment 가 true 인 경우, other.alloc_를alloc_로 이동 할당합니다. -
nullptr
를
other.
ptr_에 할당하고, std:: nullopt 를 other.alloc_에 할당합니다.
다음 값들이 모두 false 인 경우, 동작은 정의되지 않습니다:
-
ator_traits :: propagate_on_container_move_assignment -
!
alloc_ -
alloc_== other.alloc_
매개변수
| other | - | 다른 node handle |
반환값
* this
예외
아무것도 던지지 않습니다.
참고
사용자 제공 복사 할당 연산자는 없습니다.
node-handle
은
CopyAssignable
가 아닙니다.
node-handle :: ~ node-handle
|
~
/*node-handle*/
(
)
;
|
(C++26부터 constexpr) | |
만약
ptr_
!
=
nullptr
가
true
인 경우,
*
this
가 참조하는 요소를
ator_traits
::
destroy
를 호출하여 파괴한 다음,
ator_traits
::
rebind_traits
<
container-node-type
>
::
deallocate
를 호출하여 컨테이너 요소를 할당 해제합니다.
그렇지 않은 경우, 아무 작업도 수행하지 않습니다.
node-handle :: empty
|
bool
empty
(
)
const
noexcept
;
|
(constexpr since C++26) | |
노드 핸들이 비어 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
반환값
ptr_
==
nullptr
node-handle :: operator bool
|
explicit
operator
bool
(
)
const
noexcept
;
|
(constexpr since C++26) | |
node handle가 비어 있으면 false 로 변환하고, 그렇지 않으면 true 로 변환합니다.
Return value
ptr_
!
=
nullptr
node-handle :: get_allocator
|
allocator_type get_allocator
(
)
const
;
|
(constexpr since C++26) | |
저장된 할당자의 복사본을 반환합니다.
만약 empty ( ) 가 true 인 경우, 동작은 정의되지 않습니다.
반환값
*
alloc_
예외
아무것도 던지지 않습니다.
node-handle :: value (set containers only)
|
value_type
&
value
(
)
const
;
|
(constexpr since C++26) | |
*this
가 참조하는 요소에 대한 참조를 반환합니다.
empty()
가
true
인 경우, 동작은 정의되지 않습니다.
반환 값
위에서 설명한 대로입니다.
예외
아무 것도 throw하지 않습니다.
node-handle :: key (map containers only)
|
key_type
&
key
(
)
const
;
|
(constexpr since C++26) | |
key_type
멤버에 대한 비상수 참조를 반환합니다. 이 멤버는
*
this
가 참조하는 요소의 것입니다.
만약 empty ( ) 가 true 라면, 동작은 정의되지 않습니다.
반환값
위에서 설명한 대로입니다.
예외
아무것도 던지지 않습니다.
참고
이 함수는 맵에서 추출된 노드의 키를 수정한 후, 요소를 복사하거나 이동하지 않고 맵에 다시 삽입할 수 있게 합니다.
node-handle :: mapped (map containers only)
|
mapped_type
&
mapped
(
)
const
;
|
(constexpr since C++26) | |
mapped_type
멤버에 대한 참조를 반환합니다. 이 멤버는
*
this
가 참조하는 요소의 멤버입니다.
만약 empty ( ) 가 true 인 경우, 동작은 정의되지 않습니다.
반환값
위에서 설명한 대로입니다.
예외
아무것도 throw하지 않습니다.
node-handle :: swap
|
void
swap
(
/*node-handle*/
&
other
)
noexcept
(
/* see below */
)
;
|
(constexpr since C++26) | |
swap
(
ptr_
, nh.
ptr_
)
를 호출합니다. 다음 값들 중 하나라도
true
인 경우,
swap
(
alloc_
, nh.
alloc_
)
도 호출합니다:
-
ator_traits :: propagate_on_container_swap -
!
alloc_ -
!
other.
alloc_
다음 값들이 모두 false 인 경우, 동작은 정의되지 않습니다:
-
ator_traits :: propagate_on_container_swap -
!
alloc_ -
!
other.
alloc_ -
alloc_== other.alloc_
예외
ator_traits :: is_always_equal :: value )
비멤버 함수
std::swap ( node-handle )
|
friend
void
swap
(
/*node-handle*/
&
lhs,
/*node-handle*/
&
rhs
)
noexcept ( noexcept ( lhs. swap ( rhs ) ) ) ; |
(C++26부터 constexpr) | |
효과적으로 x. swap ( y ) 을 실행합니다.
이 함수는 일반적인
비한정 이름 검색
또는
한정 이름 검색
으로는 보이지 않으며,
node-handle
이 인자들의 연관 클래스일 때만
인자 종속 이름 검색
에 의해 찾을 수 있습니다.