Existe uma diferença entre size_t
e container::size_type
?
O que entendi é size_t
mais genérico e pode ser usado para qualquer size_type
s.
Mas é container::size_type
otimizado para tipos específicos de contêineres?
c++
size-type
container-data-type
Charles Khunt
fonte
fonte
N1804
e não vejo qualquer relação entreAllocator::size_type
esize_type
. Uma rápida olhada em libstdc ++ também não mostra nada semelhante a isso.size_t
era a aposta prática a implementação dessas restrições. No entanto, em C ++ 11, agora é definido essencialmente como:std::make_unsigned<X::difference_type>::type
por padrão. Que, na prática, provavelmente será o mesmo ou compatível comsize_t
.size_type
uso. O que da?size_t
é definido como o tipo usado para o tamanho de um objeto e depende da plataforma .container::size_type
é o tipo usado para o número de elementos no contêiner e depende do contêiner .Todos os
std
contêineres usamsize_t
comosize_type
, mas cada fornecedor de biblioteca independente escolhe um tipo que considera apropriado para seu contêiner.Se você olhar para qt, você descobrirá que os
size_type
contêineres Qt dependem da versão. No Qt3 eraunsigned int
e no Qt4 foi alterado paraint
.fonte
int
, em vez dessize_t
,int
é uma espécie de pequeno.Pois
std::[w]string
,std::[w]string::size_type
é igual astd::allocator<T>::size_type
, que é igual astd::size_t
. Para outros contêineres, é algum tipo de inteiro não assinado definido pela implementação.Às vezes é útil ter o tipo exato, por exemplo, sabe-se para onde o tipo vai (como, para
UINT_MAX
) para que se possa fazer uso disso. Ou para modelos, onde você realmente precisa passar dois tipos idênticos para modelos de função / classe.Freqüentemente, acho que uso
size_t
por brevidade ou iteradores de qualquer maneira. No código genérico, como você geralmente não sabe com qual instância de contêiner seu modelo é usado e qual tamanho esses contêineres têm, você terá que usar oContainer::size_type
typedef se precisar armazenar o tamanho dos contêineres.fonte