_merlinO_
unread,Sep 16, 2019, 9:50:11 AM9/16/19You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Mi sono trovato con un problema che per il momento non sono riuscito a risolvere in modo elegante.
Ho una lista di persone:
std::list<Person> people;
da questa lista voglio estrarre tutte le persone che soddisfano una condizione e spostarle in una seconda lista dello stesso tipo:
std::list<Person> selectedPeople;
La prima soluzione che ho trovato è un ciclo con un if, se la condizione è soddisfatta copia l'elemento nella seconda lista e lo cancella dalla prima.
it = people.begin();
while(it != people.end())
{
if( <condition> )
{
selectedPeople.push_back(*it);
it = people.erase(it);
continue;
}
++it;
}
Questa soluzione funziona, ma passa attraverso la copia dell'elemento, cosa che vorrei evitare: di una persona (elemento) dovrebbe esistere sempre e solo un'istanza univoca non copiabile. Quindi bisognerebbe fare proprio una move da una lista all'altra.
Ho provato con splice, ma senza successo, mi pare sia una funzione più orientata a spostare intere sezioni tra liste, piuttosto che un elemento solo.
selectedPeople.splice(selectedPeople.end(), people, it, it);
Secondo voi qual è l'approccio migliore?