0
votes

C ++ niché pour boucle avec des éléments effaçants

Je voudrais vérifier tous les éléments d'un vecteur les uns contre les autres. En vérifiant une condition, un élément doit être supprimé.

Une approche consistait à effacer les éléments par imbriqués pour des boucles p> xxx pré>

mais cela affecterait le vecteur et sa taille en runtime . P>

Une deuxième approche consistait à recueillir l'index de B dans une ONUORDED_SET, mais comment puis-je supprimer les éléments avec l'index correspondant dans le vecteur d'origine? p>

for (const int& idx : index)
{
    rs.erase(rs.begin() + idx);
}


3 commentaires

Comment les vecteurs sont-ils déclarés, comment ressemblent les données, quelle est la condition de suppression? Cette information aidera à donner de meilleures réponses.


La manière la plus simple semble créer un nouveau vecteur avec les éléments non effacés


RS2 est une copie de rs , non?


3 Réponses :


1
votes

Vous pouvez supprimer des indices d'un vecteur avec une boucle inverse dans la dernière suggestion que vous avez faite. Faites simplement que index code> un vecteur. Appelons-le Toremove Code>.

for (int i = toRemove.size() - 1; i >= 0; i--)
{
    rs.erase(rs.begin() + toRemove[i]);
}


0 commentaires

1
votes

Pour être aussi robuste que possible, j'irais avec STD :: for_ach. Dans la fonction effectuée sur chaque objet, environ:

  • Effectuez le calcul nécessaire
  • Vérifiez que votre condition de garder l'élément ou non
  • Si vous voulez le garder, ajoutez-le à un nouveau vecteur extérieur, sinon ne

    puis effacez le vecteur d'origine lorsque vous êtes terminé et échangez le vecteur in et ort. Déplacez les objets sur (intelligent!) - Pointeurs pour une efficacité améliorée (moins de copier en cours).

    For_each combiné à la création d'un nouveau vecteur devrait rendre cela très robuste contre les changements de taille potentielle et les réaffectations pouvant survenir lors de l'utilisation de STD :: Vector.


0 commentaires

0
votes

Désolé les gars, j'ai changé la distance qui vérifie le point d'insertion ... xxx

beaucoup plus facile que l'approche avant.

mais merci pour le réponses.


0 commentaires