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
相关产品推荐
相关产品推荐

