如何用指针将用户输入存入向量?求关联公寓的Person类程序实现帮助
折腾一整天没搞定太闹心了!我给你写个完整的可运行代码,完全符合你的要求,还会给你讲清楚每个关键点~
完整可运行代码
#include <iostream> #include <vector> #include <string> // 定义公寓类,存储房间数和面积 class Apartment { public: int roomCount; double area; // 构造函数,初始化公寓属性 Apartment(int rooms, double a) : roomCount(rooms), area(a) {} }; // 定义人员类,用指针指向关联的公寓对象 class Person { public: std::string name; int age; Apartment* apartment; // 构造函数,初始化人员信息和关联的公寓指针 Person(std::string n, int a, Apartment* apt) : name(n), age(a), apartment(apt) {} // 析构函数,自动释放关联的公寓对象内存 ~Person() { delete apartment; } }; int main() { // 用指针向量存储所有人员对象 std::vector<Person*> people; char continueInput; do { std::string name; int age, roomCount; double area; // 获取用户输入的人员及公寓信息 std::cout << "请输入姓名: "; std::cin >> name; std::cout << "请输入年龄: "; std::cin >> age; std::cout << "请输入公寓房间数: "; std::cin >> roomCount; std::cout << "请输入公寓面积: "; std::cin >> area; // 创建公寓对象,再创建人员对象,加入向量 Apartment* apt = new Apartment(roomCount, area); Person* p = new Person(name, age, apt); people.push_back(p); // 询问是否继续添加人员 std::cout << "是否继续输入人员信息? (y/n): "; std::cin >> continueInput; std::cout << std::endl; } while (continueInput == 'y' || continueInput == 'Y'); // 筛选并输出拥有两居室公寓的人员信息 std::cout << "=== 拥有两居室公寓的人员信息 ===" << std::endl; for (Person* p : people) { if (p->apartment->roomCount == 2) { std::cout << "姓名: " << p->name << ",公寓面积: " << p->apartment->area << std::endl; } } // 释放所有人员对象内存,避免内存泄漏 for (Person* p : people) { delete p; } people.clear(); return 0; }
关键部分说明
- 类的设计:Person类里用
Apartment* apartment指针关联公寓对象,完全符合题目要求;Apartment类专注存储公寓的核心属性。 - 指针向量存储:用
std::vector<Person*>存储人员对象的指针,满足“输入的人员信息用指针存储到向量中”的要求。 - 输入逻辑:通过
do-while循环实现任意数量的人员输入,用户可以自主选择停止输入。 - 筛选输出:遍历向量时,检查每个Person对象指向的Apartment的
roomCount是否为2,符合条件就输出对应信息。 - 内存管理:Person类的析构函数会自动释放关联的Apartment对象,最后在main函数里释放所有Person对象,彻底避免内存泄漏问题。
运行步骤
- 编译并运行代码后,按照提示依次输入每个人员的姓名、年龄、公寓房间数和面积。
- 输入完一个人员后,输入
y继续添加,输入n结束输入流程。 - 程序会自动筛选出拥有两居室的人员,并输出他们的姓名和对应公寓面积。
内容的提问来源于stack exchange,提问作者Недялко Ангелов
相关产品推荐
相关产品推荐

