谁能告诉我如何使用向量创建多个对象而不指定向量的长度

问题描述 投票:0回答:1

我尝试使用

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>
中,并使用此向量迭代对象列表

c++ class oop
1个回答
0
投票

听起来您的输入是一个名称列表,后跟一个 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 号的第二个循环保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.