現在、プログラム内の人を保持するためのベクトルを使用しています。私は関数内のベクトルと同様に、私は削除したい要素を渡すC++ベクトル内のオブジェクトを削除する
vectorname.erase(index);
でそれを削除しようとしています。私の主な問題は、コンパイル速度に関してコードをどのように改善できますか?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class person {
private:
string name;
public:
person() {}
person(string n):name(n){}
const string GetName() {return name;}
void SetName(string a) { name = a; }
};
void DeleteFromVector(vector<person>& listOfPeople,person target) {
for (vector<person>::iterator it = listOfPeople.begin();it != listOfPeople.end();++it) {//Error 2-4
if (it->GetName() == target.GetName()) {
listOfPeople.erase(it);
break;
}
}
}
int main(){
//first group of people
person player("Player"), assistant("Assistant"), janitor("Janitor"), old_professor("Old Professor");
//init of vector
vector<person> listOfPeople = { player, assistant, janitor, old_professor };
DeleteFromVector(listOfPeople, janitor);
}
あなたは 'for'でイテレータを定義していますが、使用していませんか? –
これはすべて間違っています。あなたは 'erase'を使っていますが、戻り値を新しいイテレータとして取っていないので、無効で壊れたイテレータを使用しています。そして、これを行うもっと良い方法があります。http://en.cppreference.com/w/cpp/algorithm/removeとhttps://en.wikipedia.org/wiki/Erase%E2%80でご覧になれます。 %93remove_idiom –
OK、私は 'erase'を使った直後にあなたの' break'を見るので、あなたは無効なイテレータを使っていないと思います。 –