Ich möchte Elemente aus einem Vektor mit remove_if
Funktion entfernen, aber das Löschen auf N Elemente beschränken.Übergeben Sie zusätzliche Argumente zu remove_if
Beispiel:
// predicate function that determines if a value is an odd number.
bool IsOdd (int i) {
if (we deleted more than deleteLimit)
return false;
return ((i%2)==1);
}
void otherFunc(){
int deleteLimit = 10;
// remove odd numbers:
std::vector<int>::iterator newEnd =
std::remove_if (myints.begin(), myints.end(), IsOdd (how to pass deleteLimit?));
}
Ich brauche das IsOdd
Prädikat speichert, wie viele Elemente es entfernt und wie viele wir wollen löschen. Die einzige Möglichkeit besteht darin, eine globale Variable zu verwenden? Wie folgt aus:
int deleteLimit = 10;
int removedSoFar = 0;
bool IsOdd (int i) {
if (deleteLimit < removedSoFar)
return false;
if (i%2==1) {
removedSoFar++
return true;
}
return false;
}
remove_if ...
Sie können auch verwenden myints.size() in einigen Funktors oder Lambda-Funktion, um zu bestimmen, wie viele Elemente gelöscht wurden. – Kamouth
Ich bin nicht sicher, dass Prädikate, die an 'remove_if' übergeben werden, statusbehaftet sein dürfen –
@Kamouth Aber' std :: remove_if' entfernt keine Elemente, sondern verschiebt sie nur bis zum Ende und Sie sollten dann 'Erase' verwenden entfernen Sie sie tatsächlich aus dem Container. – leemes