我有一個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