如何不指定vector长度创建多个Student对象?C++技术求助
解决动态向vector添加Student对象的问题
核心要实现的是无需指定vector初始长度,根据用户输入动态创建Student对象并存入,之后遍历输出。你原来的代码预先初始化了10个Student对象,不符合动态添加的需求,下面是调整后的实现方案:
修改思路
- 初始化空的
vector<Student>,不指定初始容量或元素数量 - 循环获取用户输入(可以一次输入一个学生的姓名和学号,逻辑更连贯)
- 每次创建一个Student对象,完成赋值后用
push_back或emplace_back添加到vector中 - 遍历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
相关产品推荐
相关产品推荐

