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

如何用指针将用户输入存入向量?求关联公寓的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对象,彻底避免内存泄漏问题。

运行步骤

  1. 编译并运行代码后,按照提示依次输入每个人员的姓名、年龄、公寓房间数和面积。
  2. 输入完一个人员后,输入y继续添加,输入n结束输入流程。
  3. 程序会自动筛选出拥有两居室的人员,并输出他们的姓名和对应公寓面积。

内容的提问来源于stack exchange,提问作者Недялко Ангелов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:41:21