#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> a = {1,2,3,7,1,5,4};
vector<int> b = {6,7,4,3,3,1,7};
a.erase(remove(a.begin(),a.end(),a[0]),a.end());
b.erase(remove(b.begin(),b.end(),b[0]),b.end());
return 1;
}
Für dieses spezielle Beispiel für konkretes Beispiel arbeiten, mein GNU gdb Ubuntu 7.7.1 besagt, dass bei Rückkehr 1 Zeile: a = { 2,3,7,1,5,4}, was nicht erwartet wird (löscht nur eine 1), und b = {7,4,3,3,1}, was nicht erwartet wird.std :: Lösch- und std :: entfernen Kombination bestimmtes Element nicht gelöscht
Meine Erwartung ist b sollte a = 2,3,7,5,4 und b = 7,4,3,3,1,7 sein.
Was passiert hier?
Würdest du nicht erwarten, dass der erste alle 1s entfernt und "{2,3,7,5,4};" ergibt? – juanchopanza
Warum ist das erste Ergebnis wie erwartet? Sollte es nicht "2,3,7,5,4" sein (beide '1's werden entfernt)? Ich glaube, Sie verletzen eine Vorbedingung, indem Sie einen Verweis auf ein Mitglied des "Vektors" übergeben, über das Sie gerade iterieren. Beide Zeilen können durch eine Kopie fixiert werden - '+ a [0]' und '+ b [0]' – Praetorian
Dies ist eigentlich ziemlich nah an einem SSCCE. Es benötigt nur den Ausgabecode. –