Durchlaufen der Liste der verlinkten Liste
Bin ich irgendwie mit c++ und bekam Kopfschmerzen, die mit diesem Zeiger und so!
Brauche ich für die Iteration über die Liste von struct die verknüpfte Liste, Lesen Sie die Daten des struct und pop, der Eintrag!
diesem mein struct :
struct node {
map<string,double> candidates;
double pathCost;
string source;
node *next; //the reference to the next node
};
durch das Lesen diese post ich meine Liste wie :
list<node*> nodeKeeper;
und dann initialisiert der erste Wert:
node *head;
head= new node;
head->pathCost = 0.0;
head->source="head";
head->next = NULL;
dünne füllen die Liste und struct :
for(unsigned int i = 0; i < sourceSentence.size(); i++){
node *newNode= new node; //create a temporary node
//DO STUFF HERE
//push currunt node to stack
nodeKeeper.push_back(newNode);
head = newNode;
}
nun habe ich die Liste von struct und ich will zu Durchlaufen und pop-Elemente:
for (list<node*>::const_iterator it=nodeKeeper.begin();it!=nodeKeeper.end();it++){
it->pop_front();
}
gibt mir diese Fehlermeldung:
error: request for member 'pop_front' in '*
es.std::_List_const_iterator<_Tp>::operator->()', die der
Zeiger-Typ 'node* const' (vielleicht meintest du mit '->' ?) Hersteller: ***
[main3.o] Fehler 1
Sieht es aus wie, dass mein iterator Punkte in der Liste nicht die Liste selbst!
Können Sie mir sagen, was ist falsch hier?!
- Warum nicht mit einem
list
vonlist
s, wenn Sie erlaubt sind zu verwenden, STL? - Ja, ich habe auch versucht, die! Ich, wie gesagt, ich bin neu in c++, ich versuche nur alles Lesen
- wie funktioniert das helfen? Ich muss Zeiger auf den nächsten Knoten!
list
ist eine doppelt verkettete Liste Struktur. Jedes element hat einen Zeiger auf den nächsten und vorherigen Knoten. Das ist, wie Sie Durchlaufen es.- Das ist es, was
list
für Sie tut. Ich würde entfernen Sie dienext
Mitglied ausnode
und ich mit einemlist<list<node>>
(oder wahrscheinlich einvector<list<node>>
, es sei denn, Sie haben einen Grund zu wählenlist
) - gut zu wissen! Ich würde denken, wie mein problem zu lösen, die durch dieses ! aber haben Sie eine Idee zu diesem problem hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Ziel ist es, eine einzige Liste Ihrer Knoten struct, gibt es keine Notwendigkeit zu verwalten nächste Zeiger Ihrer selbst. Einsetzen würde gleich bleiben (abzüglich der
head =
Linie)Pop alle element der Liste würden Sie etwas tun, wie
Kompilieren/ausführen Beispiel hier: http://ideone.com/p6UlyN
Wenn alles, was Sie tun müssen, ist entfernen Sie die Elemente, verwenden Sie
std::list::clear
:Lesen Sie den Inhalt des Elements, dann entfernen, versuchen Sie dies:
oder mit C++11:
nodekeeper.clear()
würde mehr Sinn machen?list.clear()
?(*it)->source
undnodeKeeper.pop_front()
cout<< (*it)->source
dann ich pop es aus mitnodeKeeper.pop_front()
. Funktioniert das für Sie?