Wie mehrere Objekte in der gleichen Funktion zu schaffen, aber ohne sie zu überschreiben?

StackOverflow https://stackoverflow.com/questions/609411

Frage

Ich versuche, ein Objekt in einer Funktion zu erstellen, aber ich bin mit in das Problem, dass Variablennamen haben zur Laufzeit festgelegt werden. Gibt es etwas, das ich wie mit Arrays tun kann, die ne dynamisch ermöglicht eine Variable in einer Funktion zu erstellen und vorzugsweise einen anderen Namen geben von der erstellt, wenn die Funktion zuletzt aufgerufen wurde?

*** Ich arbeite in C ++

EDIT: Ich kann keinen Code geben, weil ich jetzt nicht ein Recht haben. Alles, was ich jetzt habe, ist Pseudo-Code.

Im Grunde Ich versuche, eine Liste zu erstellen, aber die addNewItem () -Methode, die ich verwenden möge, müßte die gleiche Methode unter Verwendung verschiedene Objekte zu erstellen.

EDIT: Technisch gesehen, dass wir nicht eine Linkliste zu machen, nur mehr ein Beweis des Konzeptes zu verstehen, wie sie funktionieren.

EDIT: Hier ist der Code:

#include "linklist.h"
#include <iostream>
using namespace std;

struct linklist
{
    Student * obj;
    linklist * next;
};

linklist * head;

int main()
{

}
void addStudent(char * newsdnt)
{
    if(!head){
            linklist * a = new linklist;
            a->obj = new Student(newsdnt);
            a->next = 0;
            head = a;
            return;
    }else{
            linklist * a = new linklist;
            a->obj = new Student(newsdnt);
            a->next = 0;
            if(!head->next){
                    head->next = a;  // Can only have one or two items in list
            }
    }

}

War es hilfreich?

Lösung

Wenn Sie eine verknüpfte Liste wollen -. Rufen neue jeden neuen Knoten zu erstellen und sie dann in die Liste aufnehmen

Smth wie folgt aus:

void addStudent(char * newsdnt)
{
    linklist* a = new linklist;
    a.obj = new Student(newsdnt);
    a.next = 0;

    if( head == 0 ) {
        head = a;
    } else {
        linklist* whereToAdd = head;
        while( whereToAdd.next != 0 ) {
            whereToAdd = whereToAdd.next;
        }
        whereToAdd.next = a;
    }
}

Andere Tipps

Der einfachste Weg, eine (einfach) verkettete Liste zu bauen, ist das neue Element an der Front hinzuzufügen:

linklist *head = 0;

...
a->next = head;
head = a;
...

Wenn es akzeptabel ist, Element am Heck in O (N) Zeit hinzuzufügen, dann scannen Sie die Liste jedes Mal das Ende zu finden.

linklist head;

...
a->next = 0;
item = &head;
while (item->next != 0)
    item = item->next;
item->next = a;
...

Wenn Sie neue Objekte am Ende der Liste in O (1) Zeit hinzufügen müssen, halten dann eine kreisförmige Liste, und ein Zeiger auf das Ende der Liste (so dass tail->next ist ein Zeiger auf den Kopf der Liste ). (Die vorherige Liste Strukturen genannt werden könnten ‚offenes Ende‘).

linklist  root = { 0, &root };
linklist *tail = &root;

...
a->next = tail;
tail->next = a;
...

Vorsicht: Die Beendigungsbedingungen für den sich über die gesamte Liste Iterieren (beispielsweise ein Element in der Liste zu finden) variieren in Abhängigkeit von der Struktur verwendet (circular Vergleich mit offenem Ende)

.

Caveat : ungetesteten Code

Wenn Sie nicht sicher sind, welche O (1) und O (N) bedeutet, dann lesen Sie auf 'Big O' Notation.

Ich würde vorschlagen, einen Vektor:

#include <vector>
using namespace std;
void foo()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    cout << v[0] + v[1] << endl;
}

Unter der Annahme, dass Sie N Objekte eines Typs T müssen: Arrays sind sehr präsent in C ++. So ist die STL, die Sie mit einer Vielzahl von oppertunities bietet. Sie müssen festlegen, wie Sie diese Objekte zugreifen wollen und benutzen -, die die Wahl des Containers beeinflusst. Aber können Sie einen Code schreiben, so dass unsere Antworten etwas weniger vage sind (und mehr für Sie hilfreich)?

Ich bin mir nicht ganz sicher, was Sie wollen, aber klingt wie Sie Multiset verwenden könnte .

Bitte weitere Informationen zur Verfügung stellen, und ich könnte in der Lage sein, mehr Hilfe zu leisten.

Für den Anfang würde ich vorschlagen, dass Sie Ihre LinkedList Struktur benennen Sie eine neue verknüpfte Liste Struktur Knoten und fügt, die den Kopf hält, und (vielleicht) Strom / Endzeigern. Sie sollten dann Methoden in dieser Klasse / Struktur implementieren, dass Sie es manipulieren können.

Was Sie im Moment sind fehlt, ist eine Methode, die die Liste durchlaufen (rekursiv den nächsten Zeiger bekommen, bis Sie am Ende sind) und einen Zeiger auf das letzte Element zurück. Sobald Sie das haben, können Sie den nächsten Zeiger dieses Elements auf die neu erstellte Objekt festgelegt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top