2010-11-07 15 views
1

J'apprends à travailler avec des vecteurs dans ma classe C++. J'ai rencontré un problème qui m'a empêché d'utiliser des itérateurs avec des vecteurs. Ceci est mon code source:Comment puis-je incrémenter un itérateur vectoriel?

template <class T> 
void HuffMan<T>::search_freq(T temp) { 
    //checks for frequency 
    if(objects.empty()){ 
    objects.push_back(temp); 
    return; 
} 

vector<T>::iterator it = objects.begin(); 

while(it != objects.end()) { 
    if(*it == temp) 
    cout<<"added aready\n"; 
    else 
    objects.push_back(temp); 

    //this is where the error occurs 
    //I cannot call 'it++' for some reason 
    it++; 
} 
} 

Ce code renvoie toujours une erreur de temps d'exécution qui dit «vecteur iterator pas incrémentable. J'ai essayé de changer la boucle while dans une boucle for, mais je ne pense pas que cela a quelque chose à voir avec l'erreur.

Info: Mon objet vectoriel est déclaré comme suit:

vector<T> objects; 

Quelqu'un peut-il me aider pin point cette erreur?

Merci, ÿ_ÿ

+0

est la boucle while contenu à l'intérieur d'une méthode de la classe '' huffman ? –

Répondre

5

Votre problème est que vous incrémenter après avoir appelé push_back, qui annule l'itérateur.

Ceci est un symptôme d'un problème plus important. Je suppose que vous voulez tester temp contre tous les éléments du vector et appelez push_back s'il n'y a pas de correspondance, mais vous appelez en fait push_back pour chaque élément différent.

! (Tout le match)! = All (! Jeu)

+0

LOL Je peux voir mon erreur .. merci ... –

+0

@Y_Y: Découvrez [cette question] (http://stackoverflow.com/questions/4114503/) pour plus d'informations sur l'invalidation d'itérateur. –