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> 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 Réponses :
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]);
}
Pour être aussi robuste que possible, j'irais avec STD :: for_ach. Dans la fonction effectuée sur chaque objet, environ: p>
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). P>
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. P>
Désolé les gars, j'ai changé la distance qui vérifie le point d'insertion ... beaucoup plus facile que l'approche avant. p> mais merci pour le réponses. p> p>
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 code> est une copie de
rs code>, non?