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

C++中调用函数后如何获取对象数组的有效长度?

获取患者对象数组的有效元素长度

嘿,我懂你的需求——调用p_details录入完患者信息后,得准确知道存了多少条有效数据,不然后续搜索之类的操作很容易遍历到空元素对吧?这里给你几个C++里常用的实现思路,挑适合你的来用:

方法1:让p_details函数直接返回有效计数

最简单的方式就是把p_details的返回类型从void改成int,最后返回已经录入的患者数量i。这样main函数里直接接收这个数值,就能传给后续的搜索函数使用了。

修改后的代码示例:

#include <iostream>
using namespace std;

class patient { 
public: 
    int id; 
    char p_name[20]; 
    char f_name[20]; 
    char m_test[20]; 
    char c_report[20]; 
}; 

// 修改返回类型为int,返回有效元素个数
int p_details(patient s[]) { 
    char ch='y'; 
    int i=0; 
    while(ch == 'Y' or ch == 'y') { 
        cout<<"\nEnter Patient id : "; 
        cin>>s[i].id; 
        cout<<"Enter Patient Name :"; 
        cin>>s[i].p_name; 
        cout<<"Patient's Fathers Name :"; 
        cin>>s[i].f_name; 
        cout<<"Test of Patient :"; 
        cin>>s[i].m_test; 
        cout<<"Patient Report :"; 
        cin>>s[i].c_report; 
        cout<<"\nEnter more Records (y/n) ? : "; 
        cin>>ch; 
        cout<<"\n"; 
        i++; 
    } 
    return i; // 返回有效元素的数量
} 

int main() { 
    patient s[100]; 
    int validCount = p_details(s); // 接收有效计数
    // 后续把validCount传给搜索函数,比如searchPatients(s, validCount);
    return 0; 
}

方法2:用引用参数传递计数

如果不想改函数的返回值(比如原本要返回其他状态),可以加一个引用类型的参数,让函数直接修改外部变量的值来存储有效长度。

代码示例:

#include <iostream>
using namespace std;

class patient { 
public: 
    int id; 
    char p_name[20]; 
    char f_name[20]; 
    char m_test[20]; 
    char c_report[20]; 
}; 

// 添加int&类型的引用参数count
void p_details(patient s[], int& count) { 
    char ch='y'; 
    count = 0; // 初始化计数
    while(ch == 'Y' or ch == 'y') { 
        cout<<"\nEnter Patient id : "; 
        cin>>s[count].id; 
        cout<<"Enter Patient Name :"; 
        cin>>s[count].p_name; 
        cout<<"Patient's Fathers Name :"; 
        cin>>s[count].f_name; 
        cout<<"Test of Patient :"; 
        cin>>s[count].m_test; 
        cout<<"Patient Report :"; 
        cin>>s[count].c_report; 
        cout<<"\nEnter more Records (y/n) ? : "; 
        cin>>ch; 
        cout<<"\n"; 
        count++; 
    } 
} 

int main() { 
    patient s[100]; 
    int validCount; 
    p_details(s, validCount); // 调用后validCount就是有效元素数
    // 比如调用搜索函数:searchPatients(s, validCount);
    return 0; 
}

方法3:用std::vector代替原生数组(推荐)

其实在C++里,原生数组的灵活性很差,更推荐用标准库的std::vector容器——它会自动管理元素的数量,你直接用size()方法就能拿到有效元素的个数,还不用担心数组越界的问题。

代码示例:

#include <iostream>
#include <vector> // 要包含vector头文件
using namespace std;

class patient { 
public: 
    int id; 
    char p_name[20]; 
    char f_name[20]; 
    char m_test[20]; 
    char c_report[20]; 
}; 

// 参数改成vector<patient>&,直接往里面加元素
void p_details(vector<patient>& patients) { 
    char ch='y'; 
    while(ch == 'Y' or ch == 'y') { 
        patient p; // 临时对象存当前患者信息
        cout<<"\nEnter Patient id : "; 
        cin>>p.id; 
        cout<<"Enter Patient Name :"; 
        cin>>p.p_name; 
        cout<<"Patient's Fathers Name :"; 
        cin>>p.f_name; 
        cout<<"Test of Patient :"; 
        cin>>p.m_test; 
        cout<<"Patient Report :"; 
        cin>>p.c_report; 
        patients.push_back(p); // 把临时对象添加到vector里
        cout<<"\nEnter more Records (y/n) ? : "; 
        cin>>ch; 
        cout<<"\n"; 
    } 
} 

int main() { 
    vector<patient> patients; 
    p_details(patients); 
    int validCount = patients.size(); // 直接获取有效元素个数
    // 搜索的时候直接传vector就行,比如searchPatients(patients);
    return 0; 
}

总结

  • 如果坚持用原生数组,方法1和方法2都很实用,方法1更直观;
  • 强烈推荐方法3的std::vector,不仅不用手动计数,代码更安全简洁,也是C++的最佳实践之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:22:49