我有一个Student
对象的数组。我将数组长度设置为100,但其中没有100个有效的Student
对象。我希望能够遍历数组并获取所有有效的对象,然后在到达不具有Student对象的数组单元格时停止。在对象数组中找到最后使用的元素
我已经尝试将NULL
放入最后一个学生后的数组单元格中,然后检查if (queriedStudents[i])
以及if(queriedStudents[i] != NULL)
,但都没有为我工作。
什么是最好的方式来找到我的数组的使用部分的结束?
Student *Welcome::queryStudents(int *queries) {
int query = 0;
Student *matchedStudents[100];
int matchedPos = 0;
while (queries[query] > 0) {
for (int i = 0; i < numStudents; i++) {
if (allStudents[i]->id == queries[query]) {
matchedStudents[matchedPos] = allStudents[i];
matchedPos++;
}
}
query++;
}
matchedStudents[matchedPos] = NULL;
return *matchedStudents;
}
而且我的代码块试图打印出每个Student
的价值观:
int i = 0;
while (i < 100) {
if (queriedStudents[i]) {
cout << "ID:\t" << queriedStudents[i]->id << endl;
cout << "Name:\t" << queriedStudents[i]->name << endl;
cout << "Addr.:\t" << queriedStudents[i]->address << endl;
cout << "Phone:\t" << queriedStudents[i]->phone << endl;
} else {
i = 100;
}
i++;
}
如果可能,请使用'std :: vector'而不是数组 - 它会跟踪它包含的对象的数量。 – 2012-04-29 02:49:33
如果数组包含指针,那么只要您在开始向其添加指针之前使用NULL初始化数组,就可以使用NULL描述的方式工作。这将使您不得不手动处理每个项目上的新/删除。正如Jerry所说,vector是避免这种情况的一个好选择,只存储您实际使用的内容。另一种方法是,如果无论出于何种原因都不能使用矢量,可能会将“有效”成员添加到您的Student对象,该对象默认初始化为false,并且只有在对象中存在实际数据时才设置为true。 – 2012-04-29 03:04:13
@RetiredNinja:好评,更好的答案。发表它! – greg 2012-04-29 03:13:58