2016-04-19 8 views
-2

Ich habe diese folgende fucntion Punkte zu behandeln (unter einem Satz von Punkten), deren Typ Start_Vertex:Objekt einfügen einzustellen C++

void handleStartVertex(Vertex vi) 
{ 

    cout << "start Vertex begins ######################################################################################" << endl; 
    cout << "Handling start " << vi << vertexType[vi.type] << endl; 
    HalfEdge *ei = vi.incidentEdge; 
    std :: vector<HalfEdge > :: iterator it,itprev; 
    cout << "Origin of the incident Edge " << *(ei->origin) << endl; 
    //INSERT EI IN TOW AND SET HELPER AS VI 
    ei->setHelper(&vi); 
    tow.push_back(*ei); 

    cout << "Content of Tow in START_VERTEX" << endl; 
    for(it = tow.begin();it != tow.end();it++) 
     cout << "origin of edge " << *((*it).origin) << " Helper " << *((*it).helper) << endl; 
    cout << "start Vertex stops ######################################################################################\n\n" << endl; 
} 

wo Schlepptau ist:

vector<HalfEdge > tow; 


Das Problem Wenn ich den Helfer eines Edge setze und ihn in Vektor-Tow schiebe, ändert sich der Helfer für alle Kanten, die vorher im Schlepptau vorhanden waren, zu dem der Kante, die gerade gedrückt wird. Ich verstehe nicht, warum passiert das? Jede Arbeit wird geschätzt. Hier sind einige Ergebnisse, die die Frage klarer machen können.


starten Vertex beginnt ######################################## ################################## Start der Handhabung (2,9) START_VERTEX Ursprung der einfallenden Kante (2,9)

Inhalt des Tow in START_VERTEX
Ursprung des Randes (6,12) Helper (2,9)

Ursprung des Randes (9,11) Helper (2,9)

Ursprung der Kante (2,9) Helper (2,9)

Start Vertex stoppt ########################## ########################################################


Das richtige Ergebnis ich immer ist sein sollte:
Ursprung Rand (6,12) Helper (6,12)


Ursprung Rand (9,11) Helfer (9,11)


Ursprung der Kante (2,9) Helfer (2,9)

+0

Kommentieren, wenn etwas nicht klar ist .. – shane

Antwort

0

Der Scheitelpunkt vi wird bei der Rückkehr der Funktion zerstört. Sie stellen den Helfer auf den von Vertex vi belegten Speicher ein, und dieser Speicher ist beim letzten Druck mit Vertex (2, 9) belegt. Übergeben Sie einen Zeiger auf den Scheitelpunkt vi als Eingabe für die Funktion:

Verwandte Themen