- Wymień kontenery sekwencyjne
- Które z nich są cache-friendly?
- Jakie są złożoności poszczególnych operacji?
- Jakie jest zużycie pamięci i układ danych w pamięci?
- Które operacje powodują unieważnienie iteratorów?
-
Używaj
std:vector
jako domyślny kontener -
Jeśli z góry znasz rozmiar, użyj
std::array
(w szczególności zamiast zwykłych tablic) -
Jeśli często dodajesz lub usuwasz elementy z początku lub końca, użyj
std::deque
-
Rozważ
std::list
zamiaststd::deque
jeśli wstawiasz lub usuwasz elementy ze środka kontenera -
Zawsze preferuj
std::forward_list
niżstd::list
-
Nie używaj
std::list/std::forward_list
jeśli potrzebujesz swobodnego dostępu do dowolnego elementu -
Ogólnie preferuj
std::vector
niżstd::list
(pamięć cache) -
Jeśli wszystkie elementy będą wymagać dużo pamięci, to raczej nie używaj
std::array
z powodu ograniczenia wielkości stosu -
Jeśli kopiowanie elementów jest bardzo kosztowne, a wstawianie będzie częste, rozważ użycie
std::list/std::forward_list
-
Im mniejsze elementy, tym bardziej prawdopodobne, że
std::vector
to dobry wybór -
Im większe elementy, tym większe prawdopodobieństwo, że
std::list/std::forward_list
mogą okazać się lepsze - Ale zawsze... mierz, czy po zmianie faktycznie jest szybciej! ZAWSZE MIERZ!