Comment écrire une boucle for qui itère sur un CAtlMap en supprimant sélectivement des éléments au fur et à mesure?

StackOverflow https://stackoverflow.com/questions/197121

  •  10-07-2019
  •  | 
  •  

Question

J'essaie de faire ce qui suit sans trop de code de cas spécial pour traiter les POSITION invalidées, etc.:

Quel est le meilleur moyen de remplir les blancs?

void DeleteUnreferencedRecords(CAtlMap<Record>& records)
{
   for(____;____;____)
   {
      if( NotReferencedElsewhere(record) )
      {
        // Delete record
        _______;
      }
   }
}
Était-ce utile?

La solution

Selon cela:

http://msdn.microsoft.com/ en-us / library / 0h4c3zkw (VS.80) .aspx

RemoveAtPos a cette sémantique

  

Supprime la paire clé / valeur stockée à la position spécifiée. La mémoire utilisée pour stocker l'élément est libérée. La POSITION référencée par pos devient invalide et, même si la POSITION de tout autre élément de la carte reste valide, ils ne conservent pas nécessairement le même ordre.

Le problème est que l'ordre peut changer - ce qui signifie que GetNext () ne continuera pas vraiment l'itération. Il semble que vous ayez besoin de collecter les POSITION que vous souhaitez supprimer en un passage et de les supprimer lors du suivant. Supprimer une POSITION n'invalide pas les autres objets POSITION

Autres conseils

Mes premières pensées seraient d'enregistrer la position actuelle avant d'appeler GetNext . Ensuite, si vous supprimez l'élément, vous pouvez le réinitialiser. Cependant, le moyen le plus sûr serait de créer une nouvelle carte contenant les éléments que vous souhaitez conserver, sinon vous pourriez vous fier à la manière dont la mise en œuvre interne de POSITION fonctionne.

Je ne connais pas trop CAtlMap , mais s'il est similaire au type map de la STL, alors La" première pensée "de par Rob est sûre - - la suppression d'un élément n'affecte pas les itérateurs, à l'exception de ceux qui pointent sur l'élément en cours de suppression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top