Vector i unique_ptr

0

Witajcie.

Mam sobie vector zadeklarowany w następujący sposób: std::vector<unique_ptr<X>> WEKTOR

Załóżmy, że w wektorze przechowywana jest już jakaś ilość obiektów klasy X.

Problem rodzi się, kiedy chce usunąć dowolny element wektora? Jak to zrobić?

Nie chce przerywać wektora, dlatego robię to tak:

std::vector<unique_ptr<X>>::iterator a //element który chce usunąć
std::vector<unique_ptr<X>>::iterator end = WEKTOR.end() //ostatni element

(*a) = std::move(*(end-1));
WEKTOR.erase(end-1);

Niestety, ale mój sposób nie działa.
Jak to zrobić prawidłowo?

2

Jeśli zamierzasz przeprowadzać wiele operacji usuwania i (jak widzę) nie zależy Ci na utrzymaniu indeksów to powinieneś użyć bardziej odpowiedniego kontenera, takiego jak list lub unordered_multiset/unordered_set

0

Tak, to byłoby zdecydowanie lepsze, ale sytuacja o której mówię, wynikła w trakcie realizacji (jak dla mnie) dużego projektu i ze względu na jego objętość nie sposób teraz zmienić tych wektorów na co innego.

Zakładając, że jednak upieram przy vectorach - jak poprawnie napisać operacje usunięcia dowolnego unique_ptr z tegoż wektora?

0

vector::erase, nie ma co kombinować.
Btw 1. Jeśli całość byłaby robiona z głową to nie ważne czy byłby to wektor, lista czy coś innego, byleby implementowało wymagany interfejs;
Btw 2. Replace all i dalej jechana ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1