Namespaces
Variants

C++ named requirements: Container

From cppreference.net
C++ named requirements

Container 는 다른 객체들을 저장하고 포함된 객체들이 사용하는 메모리 관리를 담당하는 객체입니다.

목차

요구사항

주어진 유형과 값:

유형 정의
T 객체 유형
C T 유형의 객체를 포함하는 컨테이너 클래스
정의
u , v C 또는 const C 유형의 값
mv C 유형의 값
cv const C 유형의 값
lhs , rhs C 유형의 lvalue
i , j C::iterator 또는 const C :: iterator 유형의 값

C 는 다음 타입, 구문 및 표현식이 올바른 형태를 가지며 지정된 의미를 가질 경우 Container 요구사항을 충족합니다:

타입

유형 정의 요구 사항
typename C :: value_type T T CopyConstructible (C++11 이전) Erasable from C (C++11 이후) .
typename C :: reference T& 명시적 요구 사항 없음
typename C :: const_reference const T &
typename C :: iterator 반복자 유형
typename C :: const_iterator 상수 반복자 유형 C::const_iterator LegacyForwardIterator 이며, 그 값 유형 T 입니다.
typename C :: difference_type 부호 있는 정수 유형 C::difference_type C::iterator C::const_iterator 차이 유형 과 동일합니다.
typename C :: size_type 부호 없는 정수 유형 C::size_type C::difference_type 의 모든 음수가 아닌 값을 표현할 수 있을 만큼 충분히 큽니다.

문장

문장 의미론 복잡도
C c ;

C c = C ( ) ;

사후 조건 c. empty ( ) true 임. 상수
C c ( v ) ;

C c = C ( v ) ;

사전 조건

만약 v C 타입의 rvalue가 아니라면, T C 에 대해 CopyInsertable 이어야 함.

(C++11부터)
선형 [1]
사후 조건
  • 만약 v 가 lvalue라면, c == v true 임.
  • 만약 v 가 rvalue라면 , 그리고 c v 가 같은 객체를 참조하지 않는다면 (C++11부터) , c 는 이 생성 이전에 v 가 가지고 있던 값과 동일함.
참고
  1. 만약 v C 타입의 rvalue이고, C std::array 또는 std::inplace_vector 의 특수화가 아니라면, 복잡도는 상수임.

표현식

표현식 타입 의미론 복잡도
C ( ) C 사후 조건 C ( ) . empty ( ) true 입니다. 상수
C ( v ) C 선행 조건

만약 v C 타입의 rvalue가 아니라면, T CopyInsertable 이어야 C 에 삽입 가능합니다.

(C++11부터)
상수 시간 [1]
사후 조건
  • 만약 v 가 lvalue라면, C ( v ) == v true 입니다.
  • 만약 v 가 rvalue라면 , 그리고 C ( v ) v 가 동일한 객체를 참조하지 않는다면 (C++11부터) , C ( v ) 는 이 생성 전 v 가 가지고 있던 값과 동일합니다.
lhs = v C& 사후 조건
  • 만약 v 가 lvalue인 경우, lhs == v true 입니다.
  • 만약 v 가 rvalue인 경우 , 그리고 lv v 가 동일한 객체를 참조하지 않는 경우 (C++11부터) , lhs 는 이 할당 전 v 가 가지고 있던 값과 동일합니다.
선형
v.~C ( ) void 효과 v 의 모든 요소를 파괴하고 확보된 모든 메모리를 해제합니다. 선형
mv. begin ( ) C::iterator 효과 mv 의 첫 번째 요소를 가리키는 반복자를 반환합니다. 상수
cv. begin ( ) C::const_iterator 효과 cv 의 첫 번째 요소를 가리키는 반복자를 반환합니다. 상수
mv. end ( ) C::iterator 효과 mv 의 past-the-end 반복자를 반환합니다. 상수
cv. end ( ) C::const_iterator 효과 cv 의 끝을 지나는 반복자를 반환합니다. 상수
v. cbegin ( )
(C++11부터)
C::const_iterator 효과 const_cast < const C & > ( v ) . begin ( ) 을 반환합니다. 상수
v. cend ( )
(C++11 이후)
C::const_iterator 효과 const_cast < const C & > ( v ) . end ( ) 을 반환합니다. 상수
i <=> j
(C++20부터)
std::strong_ordering 제약 조건 이 표현식은 C::iterator 가 임의 접근 반복자 요구 사항을 충족할 경우에만 올바르게 형성되어야 합니다. 상수
u == v bool 효과 다음을 반환
u. size ( ) == v. size ( ) &&
std:: equal ( u. begin ( ) ,
u. end ( ) , v. begin ( ) )
(C++14 이전)
std:: equal ( u. begin ( ) , u. end ( ) ,
v. begin ( ) , v. end ( ) )
(C++14 이후)
.
선형 시간 [2]
u ! = v 효과 다음 표현과 동등함 ! ( u == v ) .
lhs. swap ( rhs )

swap ( lhs, rhs )

void 효과 lhs rhs 의 내용을 교환합니다. 상수 시간 [3]
v. size ( ) C::size_type 효과 v 의 원소 개수를 반환합니다 [4] . 상수 시간
v. max_size ( ) C::size_type 효과 C 타입의 가능한 가장 큰 컨테이너의 요소 수를 반환합니다. 상수
v. empty ( ) bool 효과 v. begin ( ) == v. end ( ) 을 반환합니다. 상수 시간
선택적 컨테이너 요구사항
(일부 컨테이너 유형에만 제공됨)
u <=> v
(C++20부터)
synth-three-way-result
< C :: value_type >
사전 조건 T three_way_comparable 를 모델링하거나, operator < T const T 타입의 값들에 대해 정의된 완전 순서 관계여야 함. 선형
효과 다음을 반환합니다: std:: lexicographical_compare_three_way
( u. begin ( ) , u. end ( ) ,
v. begin ( ) , v. end ( ) ,
synth-three-way  )
[5] .
참고 사항
  1. 만약 v 가 타입 C 의 rvalue이고, C std::array 또는 std::inplace_vector 의 특수화라면, 복잡도는 선형입니다.
  2. 만약 u. size ( ) ! = v. size ( ) true 라면, 복잡도는 상수입니다.
  3. 만약 C std::array 또는 std::inplace_vector 의 특수화라면, 복잡도는 선형입니다.
  4. 요소의 개수는 생성자, 삽입, 삭제의 규칙에 의해 정의됩니다. 이는 std:: distance ( v. begin ( ) , v. end ( ) ) 값과 같습니다.
  5. 만약 std::lexicographical_compare_three_way 에 전달된 반복자들이 ConstexprIterator s 라면, 해당 연산은 constexpr 함수들로 구현됩니다.

표현식 i == j , i ! = j , i < j , i <= j , i >= j , i > j 그리고 i - j 에서 i 와/또는 j 가 동일한 요소를 각각 가리키는 C::const_iterator 타입의 반복자로 대체되더라도 의미는 동일하게 유지됩니다.

컨테이너 데이터 경쟁

다음을 참조하십시오: container thread safety .

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 179 C++98 iterator const_iterator 타입이 비교 불가능할 수 있음 비교 가능해야 함
LWG 276 C++98 T CopyAssignable 이어야 함 T
CopyConstructible 이어야 함
LWG 322 C++98 iterator const_iterator 의 값 타입이 지정되지 않음 T 로 지정됨
LWG 774 C++98 swap ( a, b ) 에 대한 요구사항이 없었음 추가됨
LWG 883 C++98 a. swap ( b ) swap ( a, b ) 로 정의되어
순환 정의가 발생함
a b 의 값을
교환하는 것으로 정의됨
LWG 1319 C++98 iterator const_iterator
가 다중 패스 보장을 가지지 않을 수 있음
이들이
LegacyForwardIterator 요구사항을
충족해야 함
LWG 2114
( P2167R3 )
C++98 일부 함수의 bool 이 아닌 반환 타입이 허용됨 허용되지 않음
LWG 2182 C++98 reference
const_reference 로 표시된 타입들이 불명확하게 지정됨
문구 개선됨
LWG 2257 C++98 두 컨테이너가 크기가 다르더라도
동등 비교에 선형 시간이 필요했음
이 경우 상수 시간만
필요하도록 변경됨
LWG 2263 C++11 LWG 이슈 179 의 해결책이 C++11에서 실수로 누락됨 복원됨
LWG 2839 C++11 표준 컨테이너의 자기 이동 대입이 허용되지 않았음 허용되지만
결과는 명시되지 않음
N3346 C++11 C::value_type Destructible 이어야 함 C 에서 Erasable 이어야 함

참고 항목

C++ 문서 for Containers library