Jeśli dobrze to zrozumiałem, remove
w rzeczywistości nie zamienia żadnych elementów, ale po prostu przenosi elementy, dla których predykat (w przypadku remove_if
) jest fałszywy na początku sekwencji. Jeśli masz
a = [1,1,1,2,3]
i nazywają remove(a.begin(),a.end(),1)
, musisz
a = [2,3,1,2,3]
później. remove
zwraca iterator do trzeciego elementu w tym przypadku (jeśli dobrze pamiętam ...) Z drugiej strony zachowuje wszystkie oryginalne elementy sekwencji, ale zmienia ich kolejność tak, że elementy, dla których dany predykat jest prawdziwy, są umieszczane przed elementami, dla których nie jest.
partition(a.begin(), a.end(), not_equal<int>(1))
daje
a = [2,3,1,1,1]
dziękuję, zrozumiałem to –