我正在通過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 2011-01-26 10:24:50
在這種狀態下,您將一名學生帶入向量中,並且如果條件匹配,則將_same_學生插入向量中。所以你有兩次在向量中...也許你需要使用'失敗'向量... – 2011-01-26 10:27:43
修改vector_as真的是一個好主意_as你迭代它_?特別是因爲你使用索引來通過每個學生,複製通過的學生到矢量的開頭,你依靠那裏的重複`i ++`來保存你的燻肉。如果是我,我只會使用第二個向量。 – sarnold 2011-01-26 10:28:18