You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不指定vector长度创建多个Student对象?C++技术求助

解决动态向vector添加Student对象的问题

核心要实现的是无需指定vector初始长度,根据用户输入动态创建Student对象并存入,之后遍历输出。你原来的代码预先初始化了10个Student对象,不符合动态添加的需求,下面是调整后的实现方案:

修改思路

  1. 初始化空的vector<Student>,不指定初始容量或元素数量
  2. 循环获取用户输入(可以一次输入一个学生的姓名和学号,逻辑更连贯)
  3. 每次创建一个Student对象,完成赋值后用push_back或emplace_back添加到vector中
  4. 遍历vector时,用C++11及以上支持的范围for循环,代码更简洁

调整后的完整代码

#include <iostream> 
#include <string>   
#include <vector>   

class Student {
public:
    std::string name;
    int rollno;
    void display(){
        std::cout << "Name of student is "<<name<< "\nHis Roll Number is " << rollno << "\n";
    }
};

int main() {
    std::vector<Student> students; // 初始化空vector,不指定长度
    int studentCount;

    // 先让用户输入要创建的学生数量
    std::cout << "Enter number of students: ";
    std::cin >> studentCount;

    // 循环创建并添加学生对象
    for (int i = 0; i < studentCount; i++){
        Student tempStudent;
        std::cout << "Enter name for student " << (i + 1) << ": ";
        std::cin >> tempStudent.name;
        std::cout << "Enter roll number for student "<<(i + 1)<<": ";
        std::cin >> tempStudent.rollno;
        
        students.push_back(tempStudent); // 将创建好的对象添加到vector末尾
    }

    // 遍历输出所有学生信息
    std::cout << "\nAll student details:\n";
    for (const auto& student : students) { // 范围for循环,避免拷贝
        student.display();
    }

    return 0;
}

关键代码说明

  • std::vector<Student> students;:初始化空的vector,后续通过push_back动态添加元素,vector会自动管理内存扩容
  • push_back(tempStudent):将已赋值的Student对象拷贝到vector末尾;也可以用emplace_back直接在vector内部构造对象,写法是students.emplace_back();然后给students.back().name和students.back().rollno赋值,减少一次对象拷贝
  • 范围for循环for (const auto& student : students):遍历用引用避免对象拷贝,提升效率,const保证不会意外修改对象

如果不想让用户预先输入学生数量,也可以通过循环接收输入直到用户触发终止条件(比如输入特定字符),示例如下:

#include <iostream> 
#include <string>   
#include <vector>   

class Student {
public:
    std::string name;
    int rollno;
    void display(){
        std::cout << "Name of student is "<<name<< "\nHis Roll Number is " << rollno << "\n";
    }
};

int main() {
    std::vector<Student> students;
    std::string inputName;
    int inputRollno;

    std::cout << "Enter student details (enter 'quit' as name to stop):\n";
    while (true) {
        std::cout << "Enter name: ";
        std::cin >> inputName;
        if (inputName == "quit") {
            break;
        }
        std::cout << "Enter roll number: ";
        std::cin >> inputRollno;

        // 直接在vector末尾构造对象
        students.emplace_back();
        students.back().name = inputName;
        students.back().rollno = inputRollno;
    }

    std::cout << "\nAll student details:\n";
    for (const auto& student : students) {
        student.display();
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者shishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:40:26