Se ho capito bene, remove
non scambia alcun elemento, ma semplicemente sposta elementi per i quali il predicato (nel caso di remove_if
) è falso all'inizio della sequenza. Se si dispone di
a = [1,1,1,2,3]
e chiamare remove(a.begin(),a.end(),1)
, avrete
a = [2,3,1,2,3]
dopo. remove
restituisce un iteratore al terzo elemento in questo caso (se non ricordo male ...
partition
d'altra parte conserva tutti gli elementi originali della sequenza ma modifica il loro ordine in modo tale che gli elementi per i quali il predicato indicato è vero siano posti di fronte a elementi per i quali non lo è.
partition(a.begin(), a.end(), not_equal<int>(1))
cede
a = [2,3,1,1,1]
grazie, l'ho capito –