私はStudent
の配列を持っています。私は配列の長さを100に設定しましたが、100個の有効なStudent
オブジェクトがありません。配列全体を繰り返し処理し、すべての有効な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'を使用します。これは、配列に含まれるオブジェクトの数を追跡します。 –
あなたの配列にポインタが含まれている場合、NULLを使って説明したものは、ポインタを追加する前にNULLを使って配列を初期化している限り動作します。これにより、各アイテムの新規/削除を手動で処理する必要がなくなります。ジェリーは言ったように、ベクターはこれを避け、あなたが実際に使っているものだけを保存するのに良い選択です。もう一つの選択肢として、何らかの理由でvectorを使用できない場合は、Studentオブジェクトに 'valid'メンバを追加することができます。これは、デフォルトでfalseに初期化され、オブジェクトに実際のデータが存在する場合にのみtrueに設定されます。 –
@RetiredNinja:よいコメント、より良い答え。投稿する! – greg