我為一個有課程和成績的學生開設了一個課程,該程式不斷要求新學生,直到給出的名字停止。為了存盤這些實體,我想使用一個向量,但除了首先為實體創建一個陣列然后將它們推回向量之外,我沒有找到任何其他方法來存盤它們。是否可以為一個實體留出空間并在使用后洗掉存盤在 Student student 中的值以便可以重復使用?
int i=0;
Student student[20];
vector<Student> students;
cout << "Name?" << endl;
getline(cin,student[i].name);
while((student[i].name) != "stop")
{
student[i].addcoursegrade();
students.push_back(student[i]);
i ;
cout << "Name?" << endl;
getline(cin,student[i].name);
if((student[i].name) == "stop")
break;
};
我還在班級中使用向量來存盤課程和成績的值,因為它們也應該在增長。該類的代碼在這里:
class Student {
public:
string name;
void print() {
cout << name ;
for (int i = 0; i < course.size(); i )
cout << " - " << course[i] << " - " << grade[i];
cout<<endl;
}
void addcoursegrade() {
string coursee;
string gradee;
cout << "Course?" << endl;
getline(cin, coursee);
course.push_back(coursee);
while (coursee != "stop") {
cout << "Grade?" << endl;
getline(cin, gradee);
grade.push_back(gradee);
cout << "Course?" << endl;
getline(cin, coursee);
if (coursee != "stop")
course.push_back(coursee);
else if(coursee == "stop")
break;
}
};
private:
vector<string> course;
vector<string> grade;
};
uj5u.com熱心網友回復:
與其創建一個陣列然后回推,只需保留一個實體并重新分配它:
Student student;
vector<Student> students;
cout << "Name?" << endl;
getline(cin,student.name);
while((student.name) != "stop")
{
student.addcoursegrade();
// this line copies the student in the vector
students.push_back(student);
// then, reassign the temp student to default values
student = {};
cout << "Name?" << endl;
getline(cin,student.name);
if((student.name) == "stop")
break;
};
uj5u.com熱心網友回復:
有幾件事困擾著我:
- 回圈的結構方式,復制
getline. 當終止輸入出現時,我更喜歡一個帶有中斷的 while(true) 陣列。 - 不需要 C 風格的陣列。
std::vector就是這樣! - 課程和成績的單獨陣列。相反,我更喜歡一個同時存盤課程和成績的記錄
- 回圈中的索引僅用于訪問集合中的專案。(只需使用基于范圍的 for 回圈)
Student除非需要,否則不要創建物件。對字串輸入使用區域變數。
與 C 中的任何內容一樣,可以做更多的事情來改進它:例如為您的物件添加建構式、使用現代語法初始化、采用移動語意等。但我只是做了最小的更改。
我會這樣處理:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct CourseGrade {
string course;
string grade;
};
class Student {
public:
string name;
void print() {
cout << name;
for (auto& courseGrade : courseGrades) {
cout << " - " << courseGrade.course << " - " << courseGrade.grade;
}
cout << endl;
}
void addcoursegrades() {
while (true) {
cout << "Course?" << endl;
string course;
getline(cin, course);
if (course == "stop") break;
cout << "Grade?" << endl;
string grade;
getline(cin, grade);
CourseGrade courseGrade;
courseGrade.course = course;
courseGrade.grade = grade;
courseGrades.push_back(courseGrade);
}
}
private:
vector<CourseGrade> courseGrades;
};
int main() {
vector<Student> students;
while (true) {
cout << "Name?" << endl;
std::string name;
getline(cin, name);
if (name == "stop") break;
Student student;
student.name = name;
student.addcoursegrades();
students.push_back(student);
};
for (auto& student : students) {
student.print();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/377208.html
