Buduję std::list
elementów (struktur elementów grafu), które są okresowo łączone razem. Pomysł polega na tym, że jeśli odkryję węzeł łączący dwa komponenty, staną się one jednym komponentem, a moja lista wylicza moje składniki. Każdy komponent ma uchwyt (w tym przypadku std::list<component>::iterator
) do swojego "nadrzędnego" komponentu, który jest ustawiony po scaleniu. W ten sposób, aby określić składnik, do którego należy dany węzeł, chodzę w górę tego łańcucha.Usuń element ze std :: list, pozostawiając go przydzielonego
W końcu to, co szukam jest operacja na std::list
który pozwala mi brać iterator elementu, N
i usunąć go z listy, ale bez dealokując go: struktura reszty wykazu jest modyfikowany w taki sam sposób, jak normalne usuwanie.
Najlepiej coś mniej brzydkiego niż ponowne przydzielenie elementu, skopiowanie go z listy i wywołanie rzeczywistego remove
lub .
Być może uda mi się to osiągnąć dzięki splice
. Musiałbym splatować elementy, które mają zostać usunięte, do "śmieci" list
, czyż nie?
"łączenie" w listę _junk_ brzmi prawie prawidłowo ... –
Takie podejście ma mało prawdopodobne prawdopodobieństwo, że użycie niekompatybilnych alokatorów wymusi kopiowanie. Nadal ... tam kilka dodatkowych wskaźników się tasuje. Cóż ... nie boli *, że mam sposób na powtórzenie moich nie w pełni osieroconych węzłów. –
Dlaczego używanie listy zamiast listy jest nieodpowiednie dla Ciebie? –