私はAccelerated C++の例を使って作業しています。 問題の1つは、試験に合格した生徒のためのレコードを、生徒というベクトルの先頭にコピーするよう読者に求めています。 fgrade
は、他の場所で定義されている関数で、失敗した生徒を返します。 次に、resize関数を使用して余分な要素を学生から削除する必要があります。そのため、渡された要素のみが含まれています。 このコードを試しましたが、動作しません。下のコードに欠陥があるかどうか誰にでも教えてもらえますか?ベクトルへの要素の挿入に関するC++の質問
#include "stdafx.h"
#include <vector>
#include "Student_info.h"
#include "grade.h"
using std::vector;
// second try: correct but potentially slow
vector<Student_info> extract_fails(vector<Student_info>& students)
{
vector<Student_info> fail;
#ifdef _MSC_VER
std::vector<Student_info>::size_type i = 0;
std::vector<Student_info>::size_type count = 0;
#else
vector<Student_info>::size_type i = 0;
vector<Student_info>::size_type count = 0;
#endif
while (i != students.size()) {
if (!fgrade(students[i])) {
students.insert(students.begin(), students[i++]);
count++;
}
i++;
}
students.resize(count);
return students;
}
あなたのループにi ++が2回あるので、あなたのコードはすべての奇妙な学生をスキップします。 students.size()が均一でない場合、ループは永遠に進みます。 – Artium
この状態では、ベクトルで生徒を受け取り、条件が一致する場合は_same_生徒をベクトルに挿入します。だから、ベクトルに2回書いたことがあります...おそらく、あなたは '失敗'ベクトルを使う必要があります... –
それを繰り返してベクトルを修正するのは本当に良い考えですか?特に、索引付けを使用して各生徒を理解し、渡す生徒をベクターの先頭に複製すると、ベーコンを保存するために複製された「i ++」に頼っています。それが私だったら私はちょうど2番目のベクトルを使用します。 – sarnold