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

如何声明类的vector(类似结构体数组)并获取其大小?

问题解答:类对象的vector声明、大小获取及文件追加写入

当然可行,你的代码核心问题出在vector的声明和使用逻辑上,下面一步步给你修正并解释:

核心错误点修正

  • 错误的vector声明:你写的vector<test> gymMember[10];是10个独立的空vector组成的数组,完全不是你想要的“存储test类对象的动态数组”。正确的声明应该是:

    vector<test> gymMember;
    
  • 错误的元素添加方式:空vector中没有任何对象,直接用gymMember[0].name这种下标访问会触发越界错误。需要用push_back或emplace_back向vector中添加对象:

    // 用push_back添加初始化好的对象
    gymMember.push_back({"Lukas", "Naruto", "0123", "22A"});
    // 用emplace_back直接在vector内存中构造对象(更高效)
    gymMember.emplace_back("Jack", "Eren", "0589", "23A");
    
  • 错误的大小获取方式:size(gymMember)在这里获取的是数组的长度(10),不是vector中元素的数量。要获取vector的元素个数,应该用gymMember.size(),返回值类型为size_t(无符号整数),可以用auto自动推导类型:

    auto memberCount = gymMember.size();
    
  • 拼写错误:代码中gymMember[size].adress是笔误,正确拼写为address。

完整修正代码

#include <fstream>
#include <string>
#include <vector>
using namespace std;

class test {
public:
    string name;
    string nickName;
    string phoneNumber;
    string address;
};

// 正确声明:存储test对象的vector
vector<test> gymMember;

int main()
{
    // 向vector中添加成员对象
    gymMember.push_back({"Lukas", "Naruto", "0123", "22A"});
    gymMember.emplace_back("Jack", "Eren", "0589", "23A");

    // 先判断vector不为空,避免访问越界
    if (!gymMember.empty()) {
        ofstream output_file("Contact.txt", ios::app);
        if (output_file.is_open()) {
            // 获取最后一个元素,用引用避免拷贝
            const test& lastMember = gymMember.back();
            // 写入文件
            output_file << lastMember.name << " " 
                        << lastMember.nickName << " " 
                        << lastMember.phoneNumber << " " 
                        << lastMember.address << endl;
        }
        output_file.close();
    }

    return 0;
}

额外注意事项

  • 访问vector的最后一个元素时,一定要先判断!gymMember.empty(),否则空vector调用back()或[]会导致未定义行为。
  • emplace_back比push_back更高效,因为它直接在vector的内存空间中构造对象,不需要额外的拷贝操作。
  • ofstream对象在生命周期结束时会自动关闭文件,所以手动调用close()不是必须的,但显式写出也没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:28