2009-03-03 9 views
7

Je suis dans une situation où je dois utiliser une fonction de style c qui retourne le len copié. J'ai décidé que je devrais redimensionner à max, puis redimensionner à la longueur retournée expand size of vector passed as memorydésactiver la valeur de remplissage de vecteur sur redimensionner? C++

Je sais que resize définit la valeur à fillValue (toujours 0?). Donc theres va être l'initialisation inutile (espérons moins moins un mb à chaque fois) 60times chaque seconde. Est-il possible de désactiver l'initialisation sur le redimensionnement?

+0

Désolé, je ne comprends pas votre problème - pourriez-vous poster un échantillon de code? –

Répondre

11

Fondamentalement pas. Les éléments du vecteur sont construits par défaut lors d'un redimensionnement (pour un entier, cela donne 0). En supposant que vous utilisez reserve() pour vous assurer que resize() n'attribue pas de mémoire, je ne m'en soucierais pas, à moins qu'il ne s'agisse d'un problème de performance par la suite.

Si vous êtes concerné, vous pouvez envisager d'utiliser une matrice régulière et de stocker le nombre d'éléments dans une variable distincte. Cela vous donnera la meilleure performance.

Mise à jour:

John a demandé:

est le constructeur vraiment garanti à zéro que la mémoire? Je pensais que était indéfini?

Oui et non. Les types primitifs (int, bool, float, etc) ont des constructeurs par défaut qui les initialisent à zéro. Toutefois, contrairement aux classes régulières ou aux structures, le compilateur ne les appelle pas automatiquement.

par exemple

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

Parce que vecteur :: Redimensionner utilise cette dernière forme lors de l'ajout d'éléments vous garantis que les éléments créés seront correctement initialisées à zéro. Cela est vrai pour toutes les collections STL qui créent implicitement des éléments.

+0

Le constructeur a-t-il vraiment la garantie d'effacer cette mémoire? Je pensais que c'était indéfini? –

+0

Yeap, j'ai ajouté une mise à jour expliquant pourquoi –

Questions connexes