2016-05-30 3 views
0

Ich bin ein Anfänger in C++. Ich habe eine Übung, in der ich hinzufügen muss, löschen Sie eine Änderungsdaten auf einer Struktur. Also, wenn ich definieren die Struktur:Korrekte Verwendung von neuen & löschen auf Structs in C++

struct Student { 
     string name; 
     int ID; 
     double grade; 
    }; 

Wird es richtig zu verwenden: new Student student jedes Mal möchte ich einen neuen Schüler hinzufügen? Und für jedes Mal, wenn ich einen Schüler löschen möchte, kann ich das auf diese Weise tun?

delete student; 

Vielen Dank im Voraus

+3

'neuer Student' wird eine neue Instanz der 'Student'-Klasse zuweisen. Sie haben nicht genügend Informationen zur Verfügung gestellt, um festzustellen, ob dies ausreicht, um "einen neuen Schüler hinzuzufügen". Dito zum Löschen eines Schülers. Im modernen C++ wird 'new' /' delete' nur selten benötigt, da C++ - Container in der Regel ausreichen, um dynamische Sammlungen von Objekten zu verwalten. –

+5

Ich denke: Wie werden Sie die Struktur verwenden? Ich mache mir Sorgen, dass Sie einen (falschen) Eindruck haben könnten, dass Sie "neu" schreiben müssen, wann immer Sie eine Struktur verwenden wollen. –

+0

Ich muss X Anzahl der Studenten mit diesen Eigenschaften in meinem Programm speichern. Also habe ich mich entschieden, Strukturen zu verwenden, aber ich mache es wahrscheinlich nur komplizierter. Können Sie einen besseren (und einfacheren) Weg vorschlagen? –

Antwort

1

Wenn Sie neuer verwenden möchten, und löschen, können Sie versuchen:

Student* student = new Student; 
delete student; 

Außerdem gibt eine Möglichkeit, besser ist. Sie verwenden können, C++ Container wie Vektor:

vector<Student> student;//You should add "#include <vector>" 

//When you want to add a new student 
Student temp; 
getline(cin,temp.name); 
cin>>temp.ID; 
cin>>temp.grade; 
student.push_back(temp); 

//And When delete a student 
student.pop_back(); 
-3

Um in der Lage zu sein, für Sie Schüler hinzufügen, löschen Schüler oder Studenten ändern, ohne Standardbibliothek zu verwenden, müssen Sie zusätzliche Struktur definieren, die Schüler zu verwalten. Sie müssen ID als zusätzliches Feld für den Schüler hinzufügen.

struct StudentList { // Declaration: StudentList sl = new StudenList; 
    Student *list;  // linkedlist used to store any number of students 
    Student *next;  // pointer used to traverse to the next node of list 
    add(Student s)  // Usage: Student s = new Student("Anne",15,3); sl.add(s); 
    delete(int id);  // Usage: std::cin >> id; ls.delete(id); 
         // Deletes student record with id matching the parameter. 
    modify(int id);  // Usage: std::cin >> id; ls.modify(id); 
         // Modifies student record with id matching the parameter. 
} 

natürlich die bei der Umsetzung dieser Funktionen, müssen Sie die Anzahl der Schüler in der Liste zu überprüfen und sicherzustellen, dass es nicht über seine Reichweite geht (0 - max). Da die verkettete Liste in dieser Methode verwendet wird, müssen Sie den Code implementieren, um Knoten zu erstellen, Knoten zu löschen und vom Kopfknoten zum Endknoten zu gehen.

+1

Ich gehe davon aus, dass Sie versuchen, C/C++ zu lernen, deshalb habe ich die Erstellung Ihrer eigenen verknüpften Liste vorgestellt, anstatt stl-Bibliotheken wie std :: list oder vector zu verwenden. Lernen, indem man das Rad neu erfindet, gibt Ihnen eine solide Grundlage dafür, wie der interne Prozess funktioniert. Bald können Sie beginnen, die fertigen Bibliotheken zu verwenden oder sie sogar für die individuellen Bedürfnisse Ihres Projekts zu erweitern. –

+2

* Lernen, indem man das Rad neu erfindet, gibt Ihnen eine solide Grundlage dafür, wie der interne Prozess funktioniert * - Alles, was es tun wird, ist den Lerner nach C++ auszuschalten und ihn/sie nach Java gehen zu lassen. – PaulMcKenzie

+1

Solange Sie sich Ihrer Absichten bewusst sind, dass Sie das tun, um zu lernen, wird es ein produktiver Weg sein. Anstatt die Bibliotheken zu benutzen, ohne zu verstehen, was dahinter passiert. Wenn eine Funktion nicht von einer Bibliothek unterstützt wird und Sie eine benutzerdefinierte Funktion benötigen, werden Sie immer zuerst andere Personen fragen, die dies getan haben, anstatt das Problem selbst zu lösen. –