我尝试使用
vector<string>
并迭代它来创建对象,但在为它们分配值时出现错误
#include <bits/stdc++.h>
using namespace std;
class Student {
public:
string name;
int rollno;
void display() {
cout << "Name of student is " << name <<"\nHis Roll Number is " << rollno <<"\n";
}
};
int main() {
std::vector < string > obj_name;
for (int i = 0; i < 10; i++) {
string temp;
cin >> temp;
obj_name.push_back(temp);
}
for (int i = 0; i < 10; i++) {
Student obj_name[i];
}
for (int i = 0; i < 10; i++) {
int x;
cin >> x;
obj_name[i].rollno = x;
}
return 0;
}
编辑:我想问的是是否有任何方法可以从用户那里获取输入,然后创建一个具有与名称相同的输入的对象并将该名称存储在
vector<Student>
中,并使用此向量迭代对象列表
听起来您的输入是一个名称列表,后跟一个 ID 号列表。如果是这样的话,你真的不想要这个吗:
int main() {
std::vector<Student> students;
for (int i = 0; i < 10; i++) {
string name;
cin >> name;
Student s;
s.name = name;
students.push_back(s);
}
for (int i = 0; i < 10; i++) {
int x;
cin >> x;
students[i].rollno = x;
}
return 0;
}
如果你想进一步优化,请向 Student 添加一个构造函数,如下所示:
class Student {
public:
...
Student(const std::string& n) : name(name), rollno(-1) {
}
...
这样你的第一个 for 循环可以优化如下:
for (int i = 0; i < 10; i++) {
string name;
cin >> name;
students.emplace_back(Student(name));
}
然后添加卷 ID 号的第二个循环保持不变。