Pergunta

Eu estou em uma situação onde eu preciso usar uma função c estilo que retorna o len copiado. Eu decidi que eu deveria redimensionar para max, então redimensionar para o tamanho retornado expandir o tamanho do vector passado como memória

Eu sei conjuntos de redimensionamento o valor para fillValue (sempre 0?). Então theres vai ser inicialização inútil (espero menos de um mb cada vez) 60times cada segundo. Existe uma maneira ti desativar o início em redimensionar?

Foi útil?

Solução

Basicamente não. Elementos do vetor são padrão construída em cima de um redimensionamento (para um inteiro isso resulta em 0).

Assumindo que você está usando reserva () para garantir que resize () não aloca memória que eu não me preocuparia com isso a menos que prove ser um problema de desempenho mais tarde.

Se você está preocupado que você pode querer considerar apenas usando uma matriz regular e armazenar a contagem de item em uma variável separada. Isto lhe dará o melhor desempenho.

Update:

John perguntou:

É o construtor realmente garantida a zero que a memória? Eu pensei que foi indefinido?

Sim e não. Os tipos primitivos (int, bool, float, etc) têm construtores padrão que lhes inicializar a zero. No entanto, ao contrário aulas regulares ou estruturas o compilador não chamá-los automaticamente.

exemplo

int a;         // uninitialized
int b = int(); // initialized to 0

Porque vector :: redimensionamento usa a última forma quando a adição de itens que você está garantido que os elementos criados será corretamente inicializado para zero. Isto é verdade para todas as coleções do STL que criar implicitamente elementos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top