Existe uma diferença entre size_te container::size_type?
O que entendi é size_tmais genérico e pode ser usado para qualquer size_types.
Mas é container::size_typeotimizado para tipos específicos de contêineres?
Existe uma diferença entre size_te container::size_type?
O que entendi é size_tmais genérico e pode ser usado para qualquer size_types.
Mas é container::size_typeotimizado para tipos específicos de contêineres?
Respostas:
Os contêineres padrão definem size_typecomo um typedef to Allocator::size_type(Allocator é um parâmetro de modelo), que geralmentestd::allocator<T>::size_type é definido como (ou um tipo compatível). Portanto, para o caso padrão, eles são os mesmos.size_t
No entanto, se você usar um alocador personalizado, um tipo subjacente diferente pode ser usado. Portanto, container::size_typeé preferível para máxima generalidade.
size_tera 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>::typepor padrão. Que, na prática, provavelmente será o mesmo ou compatível com size_t.
size_typeuso. 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 stdcontêineres usam size_tcomo size_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_typecontêineres Qt dependem da versão. No Qt3 era unsigned inte no Qt4 foi alterado para int.
int, em vez de ssize_t, inté uma espécie de pequeno.
Pois std::[w]string, std::[w]string::size_typeé igual a std::allocator<T>::size_type, que é igual a std::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_tpor 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 o Container::size_typetypedef se precisar armazenar o tamanho dos contêineres.
N1804e não vejo qualquer relação entreAllocator::size_typeesize_type. Uma rápida olhada em libstdc ++ também não mostra nada semelhante a isso.