我是C++的初學者。我有一個練習,我必須添加,刪除結構上的修改數據。所以,如果我定義的結構:正確使用C++中的Structs上的新&刪除
struct Student {
string name;
int ID;
double grade;
};
會不會是正確的使用方法:new Student student
我想每次添加一個新的學生嗎?每次我想刪除一個學生,我可以這樣做嗎?
delete student;
在此先感謝
我是C++的初學者。我有一個練習,我必須添加,刪除結構上的修改數據。所以,如果我定義的結構:正確使用C++中的Structs上的新&刪除
struct Student {
string name;
int ID;
double grade;
};
會不會是正確的使用方法:new Student student
我想每次添加一個新的學生嗎?每次我想刪除一個學生,我可以這樣做嗎?
delete student;
在此先感謝
如果你想使用新的和刪除,可以嘗試:
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();
爲了能夠爲你增添學生,學生刪除或修改學生,不使用標準庫,你需要定義額外的結構來管理學生。您還需要將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 - 最大值)。由於在此方法中使用鏈接列表,因此您需要實現代碼以創建節點,刪除節點以及從頭節點到尾部遍歷。
我假設你正在學習C/C++,這就是爲什麼我提出創建自己的鏈表而不是使用stl :: std :: list或vector等stl庫。通過重新開始學習將爲您提供內部流程運作的堅實基礎。很快,您可以開始使用現成的庫,甚至可以擴展它以滿足項目的自定義需求。 –
*通過重新發明輪盤學習將爲您提供內部過程如何工作的堅實基礎* - 它所要做的就是關閉學習者到C++並讓他/她去Java。 – PaulMcKenzie
只要你知道你的意圖是爲了學習而做這件事,這將是一條富有成效的道路。不用理解它背後發生的事情。當一個功能不被圖書館支持,而且你需要一個自定義的功能時,你總會最終要求其他人在這裏完成它,而不是由你自己解決問題。 –
'new Student'將分配一個'Student'類的新實例。您尚未提供足夠的信息來確定這是否足以「添加新學生」。同上刪除學生。通常,在現代C++中,很少需要'new' /'delete',因爲C++容器通常足以維護對象的動態集合。 –
我在想:你將如何使用結構?我擔心你可能會產生一種(錯誤的)印象,即當你想使用一個結構時你必須寫'new'。 –
我需要在程序中存儲X個具有這些屬性的學生。所以我決定使用結構,但我可能只是使它更復雜。你能否提出一個更好(更簡單)的方法? –