답변:
표준 컨테이너 는 일반적으로 for (또는 호환 가능한 유형) size_type
로 정의되는 Allocator::size_type
(Allocator는 템플릿 매개 변수)에 대한 typedef로 정의합니다 . 따라서 표준 사례의 경우 동일합니다.std::allocator<T>::size_type
size_t
그러나 사용자 지정 할당자를 사용하는 경우 다른 기본 유형을 사용할 수 있습니다. 따라서 container::size_type
최대 보편성을 위해 바람직합니다.
size_t
그러한 제약을 실질적으로 구현했습니다. 그러나 C ++ 11에서는 기본적으로 기본적으로 다음과 같이 정의 std::make_unsigned<X::difference_type>::type
됩니다. 실제로는 아마도 동일하거나 size_t
.
size_type
지원 중단 을 암시하는 내용이 없습니다 . 무엇을 제공합니까?
size_t
객체의 크기에 사용되는 유형으로 정의되며 플랫폼에 따라 다릅니다 .container::size_type
컨테이너의 요소 수에 사용되는 유형이며 컨테이너에 따라 다릅니다 .모든 std
컨테이너는 size_t
으로 사용 size_type
되지만 각 독립 라이브러리 공급 업체는 해당 컨테이너에 적합한 유형을 선택합니다.
당신이 보면 qt, size_type
Qt 컨테이너가 버전에 따라 다르다는 것을 알 수 있습니다. Qt3에서는 였고 unsigned int
Qt4에서는 int
.
int
이 아니라 ssize_t
, int
작은의 종류이다.
들면 std::[w]string
, std::[w]string::size_type
동일한에 std::allocator<T>::size_type
상기와 동일하다 std::size_t
. 다른 컨테이너의 경우 일부 구현 정의 부호없는 정수 유형입니다.
때로는 정확한 유형을 갖는 것이 유용합니다. 예를 들어 유형이 (like, to UINT_MAX
)로 둘러싸 이는 위치를 알고 있으므로 사용할 수 있습니다. 또는 실제로 함수 / 클래스 템플릿에 두 개의 동일한 유형을 전달해야하는 템플릿의 경우.
size_t
어쨌든 간결하거나 반복자를 사용 하는 경우가 종종 있습니다. 일반 코드에서는 일반적으로 템플릿이 사용되는 컨테이너 인스턴스와 해당 컨테이너의 크기를 모르기 Container::size_type
때문에 컨테이너 크기를 저장해야하는 경우 typedef 를 사용해야합니다 .
N1804
나는 사이의 관계가 표시되지 않습니다Allocator::size_type
및size_type
. libstdc ++를 훑어 봐도 이와 유사한 것은 표시되지 않습니다.