wie stellen Sie array der Knoten?
Ich habe ein kleines Missverständnis von Pointern und arrays.
wenn ich will erstellen Sie ein array von Knoten, ich brauche einen Zeiger richtig?
Ist es
Node* array;
array = new Node[size];
Und natürlich das problem ist, wenn ich will ordnen Sie die Knoten in den array
void Class::enqueue(int newNum)
{
Node* newNode = new Node();
newNode->value = newNum;
newNode->age = 0;
if (isFull())
resize();
top++;
array[top] = newNode; //ERROR. does this have to be a pointer?
}
newNode ist ein Zeiger, ich verstehe. aber wenn ich dynamisch reservieren Sie einen Knoten, dann würde ich einen Zeiger. Wenn das der Fall ist, wie könnte ich dann weisen Sie Sie den Knoten in das array?
Danke.
Warum nicht einfach
std::vector<Node>
?? Tun Sie wirklich brauchen, Zeiger und dynamisch zugewiesenen Zeiger?InformationsquelleAutor Jack Smother | 2013-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sagten Sie, Sie möchten ein array von Knoten, aber es scheint, dass das, was Sie wirklich wollen ist ein array von Zeiger zu Knoten. newNode in deinem code ist ein Zeiger, so sollte das array sein, der Lage, der Zeiger des
Node
. Definieren Sie das array als:Denken Sie daran, um den Speicher frei, wenn es nicht mehr benötigt wird:
Können Sie auch ein array von
Node
:aber Sie sollten vorsichtig sein, weil auf diese Weise der Inhalt des Knotens wird kopiert, um die array-Zelle. Dann gibt es zwei separate Objekte, halten die gleichen Daten. Sie nicht manipulieren kann, die ursprünglichen Knoten mit dem Inhalt des Arrays.
Ich denke, Sie wirklich brauchen, eine Reihe von Zeiger zu Knoten 🙂 (oder wie sagte Bill, einen Vektor von Zeigern:
vector<Node*> v;
)Wenn Sie möchten, um Zugriff auf den ursprünglichen Knoten, die Sie dynamisch erstellt werden, müssen Sie ein array von Zeigern. Siehe mein edit.
Danke, dass beantwortet meine Frage.
Wenn es Ihnen nichts ausmacht Beantwortung für die weitere Klärung, was bedeutet delete [] array an dieser Stelle? löscht den dynamisch reservierten Arrays und auch der Knoten? Dank
Du bist herzlich willkommen. Nein, es ist nur löscht den Speicher für das array mit
new []
, da der Inhalt des Arrays sind Zeiger. Es ist der umgekehrte Vorgang dernew []
. Wenn Sie definieren das array alsNode *array = new Node[size];
, dann wird der new-operator reserviert genug Speicher halten die Knoten selbst und dann ruft die Konstruktoren für jeden. In diesem Falldelete []
kehrt, der Betrieb und fordert die desctructor für jeden Knoten, dann löscht Sie alle.InformationsquelleAutor Mohammad Dehghan
Wenn Sie verwenden können
std::vector
verwenden, können Siestd::vector<Node*> myvector;
(wenn Sie wirklich wollen, Zeiger)Dann können Sie
myvector.push_back(new Node(...));
vergessen Sie nicht, um den Speicher zu löschen, sonst wird es memory leaks,Wenn Sie dnt Sorge über Zeiger, verwenden Sie einfach die folgende (viel sauberer und keine Notwendigkeit, manuell den Speicher frei)
Viel Glück! Und Lesen über die Unterschiede zwischen
arrays
undvectors
- nur ein Beispiel - cplusplus.com/forum/beginner/6321Danke. Das war zu Informationszwecken.
InformationsquelleAutor Bill
erstellt ein array von
Node
, es speichert ObjekteNode
wiewird ein array erstellt, speichert ganze zahlen. Allerdings
new
gibt einen Zeiger auf ein Objekt derNode
, d.h.,newNode
, wenn Sie versuchen, Sie setzen Zeiger aufNode
erwartet Objekte vonNode
erhalten Sie diesen Fehler.Davon ausgehen, dass Ihre
Node
Klasse/struct hatvalue
undage
Mitglied sind, können Sie Folgendes tun:setzen Objekte der
Node
in Ihrem array vonNode
. Sie können auch STL-Containern zu vermeiden, mit den dynamischen Arrays.siehe meinen aktualisierten post?
Danke, dass war hilfreich.
InformationsquelleAutor taocp