de Salut les gens à stackoverflow,C++ Comment effacer objet en utilisant le vecteur avec auto en boucle à l'intérieur
Je me demandais s'il y avait des moyens faciles pour: contrôlé iterator ont varié pour boucles pour effacer correctement les objets de dans ses conteneurs en y accédant; en utilisant l'auto.
Pour une norme contrôlée indexé pour la boucle, je ferais quelque chose comme ceci:
void del(int i){
cout<<"Deleting: "<<myObjects[i]<<':'<<myObjects[i]->c<<endl;
for(unsigned int j = 0; j < allObjects.size();){
if(allObjects[j] == myObjects[i]){
delete allObjects[j];
allObjects[j] = 0;
allObjects.erase(allObjects.begin()+j);
break;//Found and deleted first instance, escaping for-loop.
}else{
++j;
}
}
myObjects[i]=0;
myObjects.erase(myObjects.begin()+i);
}
Une auto pour la boucle ressemblerait à quelque chose comme ceci:
void del(int i){
cout<<myObjects[i]<<endl;
for(auto it: allObjects)
if(it == myObjects[i]){
delete it;
it = 0;
//allObjects.erase();// Found, needs erasing.
}
myObjects[i]=0;
myObjects.erase(myObjects.begin()+i);
}
Je n'ai pas été en mesure pour bien travailler cela et ont eu recours à l'indexation old school (de nombreuses façons de le faire avec un index).
Je peux le supprimer et le mettre à 0, mais comment l'effacer du vecteur et éventuellement du vecteur sans connaître d'index? Je sais que je peux garder une trace de la boucle et le faire en utilisant un compteur, mais cela irait à l'encontre de l'objectif d'utiliser une belle boucle d'itération propre.
S'il ne fallait pas l'enlever dans le vecteur, comment pourrais-je procéder de la même manière facilement après, sinon en ré-accédant au vecteur?
Rien de mal à utiliser les boucles for-driven indexées, je voulais juste savoir s'il y avait une alternative facile en utilisant notre nouvel ami "auto it".
Merci.
Quel est votre objectif? Effacer des éléments à partir de vecteurs est une chose assez courante, alors assurez-vous de lire et de comprendre toutes les questions automatiquement marquées comme «liées» sur le côté droit. En outre, ne pensez pas que parce que vous avez un marteau ('auto') vous devez l'utiliser. –
Dans votre second extrait de code, il ne s'agit pas d'un itérateur mais de myObjects [/ * index correspondant * /] ... peut être trompeur ... basé sur une plage pour les boucles ne fournit pas d'itérateurs – IceFire