J'ai un std :: vector m_vPaths; Je vais itérer ce vecteur et appeler :: DeleteFile (strPath) comme je vais. Si je supprime le fichier, je l'enlèverai du vecteur. Ma question est la suivante: est-ce que je peux avoir à utiliser deux vecteurs? Y a-t-il une structure de données différente qui pourrait mieux convenir à ce que je dois faire? L'utilisation des itérateurs fait presque ce que je veux, mais le problème est qu'une fois que vous avez effacé avec un itérateur, tous les itérateurs deviennent invalides. Par exemple: itérer vecteur, supprimer certains éléments que je vais
std::vector<std::string> iter = m_vPaths.begin();
for(; iter != m_vPaths.end(); iter++) {
std::string strPath = *iter;
if(::DeleteFile(strPath.c_str())) {
m_vPaths.erase(iter);
//Now my interators are invalid because I used erase,
//but I want to continue deleteing the files remaining in my vector.
}
}
Je peux utiliser deux vecteurs et je n'aurai plus un problème, mais est-il une meilleure méthode plus efficace de faire ce que je suis en train de faire?
BTW, Incase on ne sait pas, m_vPaths est déclarée comme celui-ci (dans ma classe):
std::vector<std::string> m_vPaths;
En outre, je ne sais pas vraiment quel type de structure de données il utilise, s'il y a quelque chose de mieux qu'un vecteur me le faire savoir. Je ne pense pas que std :: queue ou std :: list a quelque chose qui va m'aider (je pourrais me tromper :) :) – cchampion