Cześć,
mam pytanie czy jest jakaś znacząca różnica w wydajności między list a forward_list? Bo jeśli nie to jaki jest sens używania forward_list, jeśli można używać z list?
Jaka jest przewaga forward_list nad list?
Mniejsze zużycie pamięci (efektywnie 1 wskaźnik mniej per node), kosztem gorszego interfejsu. Skoro zadałeś pytanie w Newbie to odpuść sobie list
i forward_list
i używaj vector
.
kq napisał(a):
Mniejsze zużycie pamięci (efektywnie 1 wskaźnik mniej per node), kosztem gorszego interfejsu. Skoro zadałeś pytanie w Newbie to odpuść sobie
list
iforward_list
i używajvector
.
Dzięki za odpowiedź!
Niestety mam problem, w którym idealnie sprawdzą się listy (częsta zmiana ilości elementów, usuwanie elementów ze środka, dodawanie nowych elementów)...
Bardzo fajnie, że tak uważasz, ale poprzyj to benchmarkiem (koniecznie kompilacja z optymalizacją). Wbrew pozorom dla małych (kilkadziesiąt¹) list małych (kilka-kilkanaście bajtów¹) elementów usuwanie ze środka wciąż może być bardziej wydajne dla pamięci ciągłej, która jest dużo bardziej cache-friendly.
Jeśli jednak upewnisz się, że jednak Twój use case wymaga list
, to prawdopodobnie nie ma sensu bawić się w forward_list
o ile nie programujesz na coś, gdzie ilość pamięci podaje się w kB.
¹ liczby z głowy, serio, benchmarkuj.
Dzięki @kq - może faktycznie masz rację i jest vector może okazać się lepszym rozwiązaniem w rozważanym przeze mnie przypadku.
Michx81 napisał(a):
kq napisał(a):
Mniejsze zużycie pamięci (efektywnie 1 wskaźnik mniej per node), kosztem gorszego interfejsu. Skoro zadałeś pytanie w Newbie to odpuść sobie
list
iforward_list
i używajvector
.Dzięki za odpowiedź!
Niestety mam problem, w którym idealnie sprawdzą się listy (częsta zmiana ilości elementów, usuwanie elementów ze środka, dodawanie nowych elementów)...
Listy prawie nigdy w dzisiejszych maszyna się nie sprawdzają, serio. Używaj vector
ów. I zobacz to, Bjarne mówi o tym właśnie:
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.