DaysShadow
Admiral
- Registriert
- Jan. 2009
- Beiträge
- 8.947
Hi,
um mich ein wenig in C++ einzuarbeiten hatte ich mir vorgenommen eine LinkedList zu schreiben, funktioniert so weit auch wie es soll.
Ich habe drei Möglichkeiten um etwas der Liste hinzuzufügen, AddFirst, AddLast und Insert an einem gegebenen index.
In meinem Testprogramm habe ich noch eine Klasse Vector2f geschrieben.
Davon erstelle ich 5 Objekte und füge sie dann der Liste hinzu, ich kann also sowohl von außerhalb der Liste als auch über die Liste auf diese zugreifen.
Füge ich alle Objekte per AddFirst oder AddLast hinzu, rufe Clear auf um die Liste zu leeren und überprüfe dann ob die Vektoren gelöscht wurden indem ich x oder y aufrufe, dann sehe dass x und y nicht mehr die Werte haben die sie haben sollten, also wurden sie gelöscht.
Füge ich alle Objekte per Insert hinzu und füge 2 der 5 Objekte zwischen die anderen, fahre dann fort wie eben, dann kann ich die Werte der zwei zwischen die anderen hinzugefügten Vektoren immer noch auslesen bzw. haben sie immer noch die richtigen Werte.
Die Frage die ich mir jetzt stelle ist, ob ich irgendwo bzw. in der Insert Methode einen Fehler gemacht habe oder nicht.
Das Problem dabei ist, dass der Destruktor aller 5 Vektoren von Clear aufgerufen wird und die Adressen derer mit denen stimmen die ich über meine außerhalb der Liste gelegenen Variablen abrufen kann.
Sollte ich mich irgendwie unklar ausdrücken, fragt einfach nach...^^
Zum Verständnis noch der Testprogrammcode:
Sollte es nötig sein, kann ich auch den Code zur LinkedList usw. posten, allerdings ist das dann ein wenig mehr Code
um mich ein wenig in C++ einzuarbeiten hatte ich mir vorgenommen eine LinkedList zu schreiben, funktioniert so weit auch wie es soll.
Ich habe drei Möglichkeiten um etwas der Liste hinzuzufügen, AddFirst, AddLast und Insert an einem gegebenen index.
In meinem Testprogramm habe ich noch eine Klasse Vector2f geschrieben.
Davon erstelle ich 5 Objekte und füge sie dann der Liste hinzu, ich kann also sowohl von außerhalb der Liste als auch über die Liste auf diese zugreifen.
Füge ich alle Objekte per AddFirst oder AddLast hinzu, rufe Clear auf um die Liste zu leeren und überprüfe dann ob die Vektoren gelöscht wurden indem ich x oder y aufrufe, dann sehe dass x und y nicht mehr die Werte haben die sie haben sollten, also wurden sie gelöscht.
Füge ich alle Objekte per Insert hinzu und füge 2 der 5 Objekte zwischen die anderen, fahre dann fort wie eben, dann kann ich die Werte der zwei zwischen die anderen hinzugefügten Vektoren immer noch auslesen bzw. haben sie immer noch die richtigen Werte.
Die Frage die ich mir jetzt stelle ist, ob ich irgendwo bzw. in der Insert Methode einen Fehler gemacht habe oder nicht.
Das Problem dabei ist, dass der Destruktor aller 5 Vektoren von Clear aufgerufen wird und die Adressen derer mit denen stimmen die ich über meine außerhalb der Liste gelegenen Variablen abrufen kann.
Sollte ich mich irgendwie unklar ausdrücken, fragt einfach nach...^^
Zum Verständnis noch der Testprogrammcode:
Code:
#include <iostream>
#include <string>
#include "include/Vector2.hpp"
#include "include/LinkedList.hpp"
int main(int argc, char** argv)
{
// Create 5 vectors
ds::utl::Vector2f* vector1 = new ds::utl::Vector2f( 50, 50 );
ds::utl::Vector2f* vector2 = new ds::utl::Vector2f( 100, 100 );
ds::utl::Vector2f* vector3 = new ds::utl::Vector2f( 150, 150 );
ds::utl::Vector2f* vector4 = new ds::utl::Vector2f( 200, 200 );
ds::utl::Vector2f* vector5 = new ds::utl::Vector2f( 250, 250 );
// Create a linked list to store vectors
LinkedList< ds::utl::Vector2f >* list = new LinkedList< ds::utl::Vector2f >( );
// Insert them
list->Insert( vector1, 0 );
list->Insert( vector2, 1 );
list->Insert( vector3, 2 );
list->Insert( vector4, 2 );
list->Insert( vector5, 2 );
// Iterate through the list and print the values of the vectors
for( ds::utl::Vector2f* vector; list->Next(); )
{
vector = list->IteratorValue();
std::cout << "vector: " << vector->getX() << " | " << vector->getY( ) << std::endl;
}
// looks like this:
// 50 | 50
// 100 | 100
// 250 | 250
// 200 | 200
// 150 | 150
// Clear the list
list->Clear( );
// Check if everything got deleted
std::cout << vector1->getX() << " | " << vector1->getY() << std::endl;
std::cout << vector2->getX() << " | " << vector2->getY() << std::endl;
std::cout << vector3->getX() << " | " << vector3->getY() << std::endl;
// Values are readable 200 | 200
std::cout << vector4->getX() << " | " << vector4->getY() << std::endl;
// Values are readable 250 | 250
std::cout << vector5->getX() << " | " << vector5->getY() << std::endl;
std::string input;
std::cin >> input;
return 0;
}
Sollte es nötig sein, kann ich auch den Code zur LinkedList usw. posten, allerdings ist das dann ein wenig mehr Code
