Eu tenho um vector<CustomClass*>
e coloco muitos itens no vetor e preciso de acesso rápido, para não usar a lista. Como definir o tamanho inicial do vetor (por exemplo, 20.000 lugares, para evitar a cópia quando insiro um novo)?
130
std::vector
referência, dependendo do que melhor se adapta às suas necessidades.std::vector
no título?Respostas:
ou:
O primeiro define o tamanho real da matriz - ou seja, torna um vetor de 20.000 ponteiros. O último deixa o vetor vazio, mas reserva espaço para 20000 ponteiros, para que você possa inserir (até) muitos deles sem que seja necessário realocar.
Pelo menos na minha experiência, é bastante incomum que qualquer um deles faça uma enorme diferença no desempenho - mas pode afetar a correção em algumas circunstâncias. Em particular, desde que nenhuma realocação ocorra, é garantido que os iteradores no vetor permanecem válidos. Depois de definir o tamanho / espaço reservado, você garante que não haverá realocações desde que você não t aumentar o tamanho além disso.
fonte
whatever[10000] = somepointer;
, onde o último exige quepush_back
você inclua cada ponteiro. Pelo menos se você está acostumadovector
, o último é provavelmente mais simples e mais natural.reserve
, que pré-aloca o tamanho da memória. Em teoria, definir o tamanho ainda pode ser minuciosamente mais rápido, pois também evita o aumento do tamanho atual toda vez que você adiciona um item. Na realidade, duvido que você possa medir isso.Você precisa usar a função de reserva para definir um tamanho alocado inicial ou fazê-lo no construtor inicial.
ou
Quando você
reserve()
elementos,vector
ele alocará espaço suficiente para (pelo menos?) Esse número de elementos. Os elementos não existem novector
, mas a memória está pronta para ser usada. Isso irá acelerarpush_back()
porque a memória já está alocada.fonte
std::vector<Custom Class*> content(100);
)