Accelerated C++의 예제를 진행하고 있습니다. 문제 중 하나는 학생들에게 시험이라고 불리는 벡터의 시작 부분에 시험에 합격 한 학생의 기록을 복사 해달라고 요청합니다. 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 ++를 두 번 사용하면 코드가 이상한 모든 학생을 건너 뜁니다. students.size()가 짝수가 아니면 반복문은 영원히 사라질 것입니다. – Artium
이 상태에 있으면 벡터에서 학생을 데리고 조건이 일치하면 _same_ 학생을 벡터에 삽입합니다. 그래서 벡터에 두 번 있습니다 ... 아마도 '실패'벡터를 사용해야 할 것입니다 ... –
반복해서 벡터를 수정할 수 있습니까? 특히 각 학생을 빠져 나가기 위해 색인 생성을 사용하고 있기 때문에, 지나가는 학생을 벡터의 시작 부분에 복제하면, 베이컨을 저장하기 위해 복사 된 'i ++'에 의존하게됩니다. 그것이 나라면 두 번째 벡터를 사용합니다. – sarnold