list vs forward_list

0

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?

3

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.

0
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 i forward_list i używaj vector.

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)...

5

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.

0

Dzięki @kq - może faktycznie masz rację i jest vector może okazać się lepszym rozwiązaniem w rozważanym przeze mnie przypadku.

1
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 i forward_list i używaj vector.

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:

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