• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Vector vs Lista

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+3 głosów
1,960 wizyt
pytanie zadane 14 kwietnia 2015 w C i C++ przez achilles147 Dyskutant (9,580 p.)
Witam piszę ponieważ natknołem na małą zagwozdkę. Otóż chce stworzyć jakiś kontener, z którego będe mógł wylosować jakiś dowolny element a następnie go usunąć. Zastanawiałem się na początku nad użyciem std::vector<> ponieważ posiada on iterator swobodnego dostępu i można łatwo odwoływać się do elementów.

np. losuje sobie liczbe n=6 , następnie odwołuje się do vectora MyVector[n] i moge sobie działać na wylosowanym obiekcie. Następnie trzeba go usunąć więc używam funkcji vector.erease(n). Problem tkwi tutaj w bardzo słabej efektywności ponieważ za każdym razem kiedy dodaje element do wektora lub usuwam tak naprawdę kopiuję całą tablicę. (raczej kiepsko przy większej ilości danych)

rozwiązanie z listą wydaje się bardziej efektywne ponieważ lista nie ma układu takiego jak tablica i można swobodnie dodawać i usuwać z niej elementy bez utraty na jakości. Ale znowu jak wylosować losowy element?

Bardzo prosiłbym o jakieś sugestie:)

1 odpowiedź

+3 głosów
odpowiedź 14 kwietnia 2015 przez daan Pasjonat (17,640 p.)
wybrane 15 kwietnia 2015 przez achilles147
 
Najlepsza
no cóż taka jest specyfika kontenerów :D każdy ma jakieś wady i zalety jeżeli chodzi o liste musiałbyś po prostu przechodzić za każdym razem przez całość (od początku lub od końca) do danego elementu jest to oczywiscie wolniejsze od dostępu bezpośredniego jak w vectorze jednak myśle że lepsze od kopiowania za każdym razem dużej ilości danych, słyszałeś o kontenerach nieuporządkowanych ? przyjrzyj się może unordered_set może to jakoś pomoże :)
komentarz 14 kwietnia 2015 przez achilles147 Dyskutant (9,580 p.)
też się nad tym zastanowiłem i postanowiłem skorzystać z listy i z funkcji std::advance(), która pozwoli łatwo przesuwać iterator:). Z chęcią się przyjrzę tym kontenerką dzięki za response!

Podobne pytania

0 głosów
2 odpowiedzi 685 wizyt
pytanie zadane 4 lutego 2017 w C i C++ przez Lukasz95 Bywalec (2,160 p.)
0 głosów
1 odpowiedź 961 wizyt
pytanie zadane 13 czerwca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
0 odpowiedzi 83 wizyt

93,439 zapytań

142,431 odpowiedzi

322,674 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...