Komme mit Erstellung von deque nicht klar



  • Hallo,

    ich habe folgenden Codeschnipsel:

    void graph::bet(deque<node *> *nv, deque<edge *> *ev) {
    
    	int ID, ID2; //Indizes
    	for(it = nv->begin(); it != nv->end(); it++) {
    
                    queue<node *, deque<node *> > Q;
    		stack<node *, deque<node *> > S;
    
    		ID = (*it)->nodeID;
    		vector<long> dist(nv->size() + 1, -1);
    		vector<long> sigma(nv->size() + 1, 0);
    		unsigned int a = nv->size();
    		deque<deque<node *> > pred(a, NULL);
    

    Die letzte Zeile bereitet mir Probleme. Ich will eine deque erstellen, deren Elemente Knotendeques sind. Also quasi eine Liste mit Knotenlisten. Das Problem, was ich habe, ist die Erstellung. Ich muss ja angeben wieviel Elemente die deque haben soll. Ebenfalls muss ich angeben wie groß die einzelnen deques in der deque sein sollen.
    Die Größe der deque soll so groß sein wie nv->size(). Die einzelnen deques hingegen sollen dynamisch später mit push_back gefüllt werden.
    Wie schaffe ich es, die deque "pred" so zu initialisieren, dass das geht? Anfangs hatte ich das so:

    deque<deque<node *> > pred(10000, NULL)
    

    das NULL kann man auch weglassen, dann gehts immer noch.

    Damit hat das Programm funktioniert, aber die Zahl 10000 will ich ja jetzt durch die tatsächliche Größe von nv ersetzen. Das geht aber irgendwie nicht. Ich habe es mit

    deque<deque<node *> > pred(nv->size(), NULL)
    

    probiert, aber bei der Ausführung kommt dann ein Fehler.

    Hat jemand Rat wie ich "pred" erstellen kann, ohne dass ein Fehler kommt?

    Danke für eure Hilfe



  • Euler schrieb:

    deque<deque<node *> > pred(nv->size(), NULL)
    

    probiert, aber bei der Ausführung kommt dann ein Fehler.

    Hat jemand Rat wie ich "pred" erstellen kann, ohne dass ein Fehler kommt?

    Danke für eure Hilfe

    Was willst du mit NULL erreichen?
    "Es kommt ein Fehler" ist ziemlich nutzlos, wenn du Hilfe bekommen möchtest. Was soll man damit anfangen?

    deque<deque<node *> > pred(nv->size() );
    

    sollte dir eine deque mit nv->size() leeren deques erstellen.

    Möglicherweise solltest du die deque nicht in der for-Schleife sondern außerhalb anlegen?



  • Zunächst mal danke für die Antwort.

    manni66 schrieb:

    "Es kommt ein Fehler" ist ziemlich nutzlos, wenn du Hilfe bekommen möchtest. Was soll man damit anfangen?

    Compilieren tut er es, nur bei der Ausführung des Programms bricht er ab mit der Meldung "unbekannte Win32-Ausnahme in Projekt.exe". Und da das halt auch kommt sobald ich die von dir vorgeschlagene Lösung

    deque<deque<node *> > pred(nv->size() );
    

    einbaue, weiß ich auch nicht, wo der Fehler liegen könnte.

    Möglicherweise solltest du die deque nicht in der for-Schleife sondern außerhalb anlegen?

    Laut dem mir vorliegenden Algorithmus wird die deque so angelegt. Aber ich werde deinen Vorschlag mal probieren.



  • Euler schrieb:

    Compilieren tut er es, nur bei der Ausführung des Programms bricht er ab mit der Meldung "unbekannte Win32-Ausnahme in Projekt.exe". Und da das halt auch kommt sobald ich die von dir vorgeschlagene Lösung

    deque<deque<node *> > pred(nv->size() );
    

    einbaue, weiß ich auch nicht, wo der Fehler liegen könnte.

    Warum nimmst du an, dass der Fehler ausgerechnet von der deque stammt?

    Euler schrieb:

    Möglicherweise solltest du die deque nicht in der for-Schleife sondern außerhalb anlegen?

    Laut dem mir vorliegenden Algorithmus wird die deque so angelegt. Aber ich werde deinen Vorschlag mal probieren.

    Das kann ja auch richtig sein, merkwürdig ist halt nur, das für jeden Iterationsschritt in der Schleife eine neue deque angelegt wird.



  • manni66 schrieb:

    Warum nimmst du an, dass der Fehler ausgerechnet von der deque stammt?

    Weil ich im weiteren Code noch gar nichts mit der erstellten deque gemacht habe. Und sobald ich halt wieder irgendeine Zahl reinschreibe anstatt nv->size(), dann geht es wieder. Weiß auch nicht. 😕
    Ich versuche mal nen anderen Container. Eventuell geht es dann.



  • Euler schrieb:

    Compilieren tut er es, nur bei der Ausführung des Programms bricht er ab mit der Meldung "unbekannte Win32-Ausnahme in Projekt.exe".

    Nutze den Debugger (Debug-Build erstellen), dann siehst du auch, in welcher Zeile es schiefgeht!


Anmelden zum Antworten