Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

usuwanie elementów w std::vector

Ostatnio zmodyfikowano 2024-02-10 23:18
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
usuwanie elementów w std::vector
» 2024-02-09 16:16:14
Witam.
Stworzyłem listę elementów przy pomocy kontenera std::vector < unit* > units.
Jak z takiego kontenera usunąć unit* ?
P-180692
DejaVu
» 2024-02-09 16:27:19
Przeszukać cały kontener w poszukiwaniu wskaźnika unit*. Chyba, że wiesz, który element chcesz usunąć, to wówczas możesz użyć metody:
C/C++
units.erase( units.begin() + numerElementu );

Niemniej jednak złożoność obliczeniowa będzie liniowa O(n), więc Twój koncept może być z założenia zły, aby wykorzystywać std::vector do przechowywania jednostek (jeżeli planujesz mieć ich bardzo dużo).
P-180693
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-09 16:30:39
hmm... a jest jakiś inny kontener, który w prostszy sposób pozwoliłby usunąć element przy pomocy wskaźnika ?
P-180694
pekfos
» 2024-02-09 20:20:17
Zgaduję że chodzi o grę i tu typowym rozwiazaniem jest tzw. mark & sweep. Niech unit ma flagę oznaczającą że obiekt ma być usunięty. W trakcie aktualizacji stanu gry usuwasz wszystkie oznaczone elementy, np przez std::remove_if(). Generalnie nie chcesz usuwać obiektu od razu, bo jeśli postanowisz usunąć wszystkie to będziesz mieć kwadratową liczbę kroków. Musiałbyś też zachować ostrożność jeśli usuwanie może nastąpić w trakcie iterowania po tym wektorze (to by dotyczyło również dodawania obiektów).
P-180697
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-09 20:38:03
na razie to zamiast usuwać elementy, czyszczę listę i dodaje wszystkie pozostałe elementy raz jeszcze. Dlatego szukam jakiejś wygodnej alternatywy, ew. zmianę kontenera - jeśli jakiś znasz i może być użyteczniejszy niż std::vector to chętnie przyjmę radę.

Ale tak, w ten sposób zazwyczaj usuwałem elementy ale to w "ręcznie utworzonej liście jednokierunkowej", a stosowanie takiej mi odradzałeś ze względu na wolne działanie.
P-180700
pekfos
» 2024-02-10 13:27:31
Ale tak, w ten sposób zazwyczaj usuwałem elementy ale to w "ręcznie utworzonej liście jednokierunkowej", a stosowanie takiej mi odradzałeś ze względu na wolne działanie.
A co ma piernik do wiatraka? Wolne działanie to nie jedyny problem tutaj i sporo zależy od kontekstu. Jakby myśleć wyłącznie o jednym aspekcie o jaki pytasz, to bym powiedział żebyś nie używał kontenera w ogóle, bo skoro chcesz z niego tylko usuwać elementy to będzie zawsze pusty.
P-180702
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-10 13:31:24
to co w takim razie używać ?
P-180703
pekfos
» 2024-02-10 13:41:28
A co chcesz osiągnąć?
P-180705
« 1 » 2
  Strona 1 z 2 Następna strona