Dla std::[w]string
, jest równa std::allocator<T>::size_type
, która jest równa std::size_t
. W przypadku innych kontenerów jest to pewna implementacja zdefiniowanego typu całkowitego typu unsigned.
Czasami dobrze jest mieć dokładny typ, więc na przykład wiadomo, gdzie typ otacza się na (np. Do UINT_MAX
), aby można było z niego skorzystać. Lub w przypadku szablonów, w których naprawdę trzeba przekazać dwa identyczne typy do szablonów funkcji/klasy.
Często używam size_t
dla zwięzłości i iteratorów. W ogólnym kodzie, ponieważ generalnie nie wiadomo, z jakiego kontenera wystąpił twój szablon i jaki jest rozmiar tych kontenerów, będziesz musiał użyć Container::size_type
typedef, jeśli chcesz przechowywać rozmiar kontenera.
Czy możesz wyjaśnić tę odpowiedź? Spojrzałem wstecz na projekty standardów już w "N1804" i nie widzę żadnego związku między 'Allocator :: size_type' i' size_type'. Szybkie spojrzenie na libstdC++ również nie pokazuje niczego podobnego. –
@ShafikYaghmour, więc ta odpowiedź jest nieco nieaktualna, ale aby zmaksymalizować przenośność, myślę, że rada jest nadal dobra: C++ 03 określono "Tabela 32: size_type: typ, który może reprezentować rozmiar największego obiektu w modelu alokacji. " W tamtym czasie 'size_t' było założeniem praktycznej implementacji tych ograniczeń. Jednak w C++ 11 jest teraz zdefiniowany zasadniczo jako: 'std :: make_unsigned :: type' domyślnie. Który w praktyce będzie prawdopodobnie taki sam lub zgodny z 'size_t'. –
CARE odpowiedź jest niepoprawna .... patrz http: // stackoverflow.com/questions/4849678/c-for-loop-size-type-vs-size-t TL: DR: podzielniki typu size_type muszą być size_t aw C++ 17 size_type zostaną uznane za przestarzałe. – user3063349