2016-05-30 1 views
0

私はC++の初心者です。私は構造体のデータを追加、削除しなければならないという練習をしています。私は、構造体を定義するのであれば:C++のStructsでnewとdeleteを正しく使用する

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

それを使用するのが正しいだろう:私は新しい学生を追加したいnew Student studentたびに?そして、私が学生を削除するたびに、私はそれをこのようにすることができますか?事前

+3

'new student'は' Student'クラスの新しいインスタンスを割り当てます。これが「新しい学生を追加する」に十分かどうかを判断するのに十分な情報を提供していません。学生を削除するための同上。一般的に、現代のC++では、C++コンテナはオブジェクトの動的なコレクションを維持する目的では一般的であるため、 'new' /' delete'はほとんど必要ありません。 –

+5

私は考えています:どのように構造体を使用しますか?あなたが構造体を使いたいときにいつでも 'new'を書かなければならないという(間違った)印象を受けているのではないかと心配しています。 –

+0

自分のプログラムにこれらのプロパティを持つ学生をX人登録する必要があります。だから私は構造体を使うことにしましたが、おそらくもっと複雑にしています。あなたはより良い(そしてより簡単な)方法を提案できますか? –

答えて

1

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(); 
-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

私はあなたがstd :: listやvectorのようなstlライブラリを使うのではなく、あなた自身のリンクリストを作成した理由をC/C++を学ぼうとしていると仮定しています。ホイールを再発明することで学ぶことで、内部プロセスの仕組みの確かな基礎が得られます。まもなく、既成のライブラリを使用したり、プロジェクトのカスタムニーズに合わせてライブラリを拡張したりすることができます。 –

+2

*車輪を改革することで学ぶことで、内部プロセスの仕組みの強固な基盤を得ることができます。*学習者をC++にしてJavaに移行させるだけです。 – PaulMcKenzie

+1

あなたが学習のためにやっているあなたの意思を認識している限り、それは生産的な道になるでしょう。どのようなことが起こっているのかを理解せずにライブラリを使用する代わりに。ライブラリでサポートされていない機能があり、カスタム機能が必要な場合は、自己で問題を解決する代わりに、ここで完了した他の人に依頼することになります。 –

関連する問題