2011-08-02 3 views
3

J'ai un std :: vector que je sais n'aura jamais croître - il aura toujours n éléments (malheureusement, n n'est pas connu au moment de la compilation, donc je peux ' t utilise std :: array). Je peux le faire:Empêcher std :: vector de redimensionner sur push_back

std::vector<blah> v(n); 

qui définit correctement sa capacité à n. Mais quand je procède à remplir v avec push_back, il redimensionne automatiquement à 2n. Je réalise que c'est une optimisation prématurée, mais ça m'embête. Y at-il un moyen de définir la taille maximale ou quelque chose?

Répondre

13

Ce constructeur ne définit pas la capacité du vecteur à n, mais crée un vecteur contenant n objets construits avec le constructeur par défaut blah. Cela peut être déroutant pour les personnes avec un arrière-plan Java ou .NET, où ArrayList et List<T> ont tous deux un constructeur qui définit une capacité initiale.

La solution est de le faire en deux étapes:

std::vector<blah> v; // create an empty vector 
v.reserve(n); // increase capacity 
+2

Pour ce que ça vaut la peine, cela ne se prémunir contre la croissance des capacités si quelqu'un abuse du vecteur et provoque la capacité de doubler. Si vous voulez ce genre de sécurité, vous devez probablement faire rouler votre propre classe. –

+0

Merci. Désolé pour la question stupide! –

Questions connexes