0
votes

Est-ce une bonne habitude de vider les structures de données après que vous ayez fini d'utiliser?

J'utilise diverses structures de données dans ma programmation et je transférais souvent des données d'une structure à une autre.

// assume that I want to transfer all data from v to Q
vector <int> v = {1, 2, 3, 4};
queue <int> Q;

for(int item : v){
    Q.push(item);
}
// after this point, v is no longer used


0 commentaires

3 Réponses :


6
votes

Non, ce serait complètement inutile.

Au lieu de cela, minimisez la portée de vos variables aux endroits où vous en avez besoin, de sorte que vous ne peut pas em> accidentellement Utilisez-les après que vous aviez l'intention de; Votre construction échouera. p>

Faites cela avec des fonctions (préférables) ou avec des panneaux de blocs supplémentaires: P>

queue <int> Q;

{
   vector <int> v = {1, 2, 3, 4};
   for(int item : v){
       Q.push(item);
   }
}


3 commentaires

Euh, y a-t-il une raison pour laquelle vous ne mettez pas q à l'intérieur de la portée du bloc? Pour que son DTor soit appelé à la fin de celui-ci?


@HotelCalifornie Parce que vous ne seriez pas en mesure de l'utiliser après avoir effectué la copie ... Le principe de la question est que q continue à être utilisé, alors que v ne fait pas.


Oh bien sûr. Manqué que v était la cible du nettoyage



0
votes

Il n'y a aucun point de faire ça.

Si vous allez réutiliser le vectoriel , juste v.cclear () C'est d'abord ou envisagez de refactoriser la fonction s'il est déroutant de connaître l'état des variables dans la portée actuelle.


0 commentaires

0
votes

Non. Lorsque le vecteur est hors de portée, les données seront «parties» de toute façon.

Si votre Vecteur est utilisé dans une étendue plus large, vous pouvez utiliser la méthode strink_to_fit qui réduit la capacité du vecteur et donc libère une mémoire supplémentaire.

plus à propos de ici .


0 commentaires