2016-05-30 61 views
0

我是C++的初學者。我有一個練習,我必須添加,刪除結構上的修改數據。所以,如果我定義的結構:正確使用C++中的Structs上的新&刪除

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

會不會是正確的使用方法:new Student student我想每次添加一個新的學生嗎?每次我想刪除一個學生,我可以這樣做嗎?

delete student; 

在此先感謝

+3

'new Student'將分配一個'Student'類的新實例。您尚未提供足夠的信息來確定這是否足以「添加新學生」。同上刪除學生。通常,在現代C++中,很少需要'new' /'delete',因爲C++容器通常足以維護對象的動態集合。 –

+5

我在想:你將如何使用結構?我擔心你可能會產生一種(錯誤的)印象,即當你想使用一個結構時你必須寫'new'。 –

+0

我需要在程序中存儲X個具有這些屬性的學生。所以我決定使用結構,但我可能只是使它更復雜。你能否提出一個更好(更簡單)的方法? –

回答

1

如果你想使用新的和刪除,可以嘗試:

Student* student = new Student; 
delete student; 

此外,還有一個更好的方法。您可以使用C++的容器,如向量:

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

爲了能夠爲你增添學生,學生刪除或修改學生,不使用標準庫,你需要定義額外的結構來管理學生。您還需要將ID添加爲學生的附加字段。

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. 
} 

當然,在這一功能的實現,你需要檢查學生在列表的數量,並確保它不會超出其範圍(0 - 最大值)。由於在此方法中使用鏈接列表,因此您需要實現代碼以創建節點,刪除節點以及從頭節點到尾部遍歷。

+1

我假設你正在學習C/C++,這就是爲什麼我提出創建自己的鏈表而不是使用stl :: std :: list或vector等stl庫。通過重新開始學習將爲您提供內部流程運作的堅實基礎。很快,您可以開始使用現成的庫,甚至可以擴展它以滿足項目的自定義需求。 –

+2

*通過重新發明輪盤學習將爲您提供內部過程如何工作的堅實基礎* - 它所要做的就是關閉學習者到C++並讓他/她去Java。 – PaulMcKenzie

+1

只要你知道你的意圖是爲了學習而做這件事,這將是一條富有成效的道路。不用理解它背後發生的事情。當一個功能不被圖書館支持,而且你需要一個自定義的功能時,你總會最終要求其他人在這裏完成它,而不是由你自己解決問題。 –