Si lo entendí bien, remove
en realidad no intercambia ningún elemento, simplemente mueve elementos para los cuales el predicado (en el caso de remove_if
) es falso al comienzo de la secuencia. Si tiene
a = [1,1,1,2,3]
y llamar remove(a.begin(),a.end(),1)
, tendrá
a = [2,3,1,2,3]
después. remove
devuelve un iterador al tercer elemento en este caso (si no recuerdo mal ...)
partition
por otro lado conserva todos los elementos originales de la secuencia, pero cambia su orden de modo que los elementos para los que el predicado determinado es verdadero se colocan delante de los elementos para los que no lo es.
partition(a.begin(), a.end(), not_equal<int>(1))
produce
a = [2,3,1,1,1]
gracias, entendí que –