_merlinO_
2019-09-16 13:50:09 UTC
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?
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?