Przeprowadziłem 3 różne eksperymenty z listami i wektorami C ++.
Te z wektorami okazały się bardziej wydajne, nawet przy dużej ilości wstawień w środku.
Stąd pytanie: w którym przypadku listy mają większy sens niż wektory?
Jeśli wektory wydają się w większości przypadków wydajniejsze i biorąc pod uwagę podobieństwo ich członków, to jakie korzyści pozostawiają listy?
Wygeneruj N liczb całkowitych i umieść je w pojemniku, aby pojemnik pozostał posortowany. Wstawianie zostało wykonane naiwnie, poprzez czytanie elementów jeden po drugim i wstawianie nowego tuż przed pierwszym większym.
Z listą czas płynie przez dach, gdy wzrasta wymiar, w porównaniu do wektorów.Wstaw N liczb całkowitych na końcu pojemnika.
W przypadku list i wektorów czas wydłużył się o ten sam rząd wielkości, chociaż z wektorami był 3 razy szybszy.Wstaw N liczb całkowitych do pojemnika.
Uruchom licznik czasu.
Posortuj kontener za pomocą list.sort dla list i std :: sort dla wektorów. Zatrzymaj minutnik.
Ponownie czas wzrasta o ten sam rząd wielkości, ale jest średnio 5 razy szybszy w przypadku wektorów.
Mogę nadal przeprowadzać testy i wymyślić kilka przykładów, w których listy okazałyby się lepsze.
Ale wspólne doświadczenie was czytających tę wiadomość może dostarczyć bardziej produktywnych odpowiedzi.
Być może natrafiłeś na sytuacje, w których listy były wygodniejsze w użyciu lub działały lepiej?
list
Prawdopodobnie nie lepiej jeśli usuwasz wiele elementów. Nie wierzę, vector
że kiedykolwiek zwróci pamięć do systemu, dopóki cały wektor nie zostanie usunięty. Pamiętaj też, że Twój test nr 1 nie polega wyłącznie na testowaniu czasu wstawiania. To test łączący wyszukiwanie i wstawianie. Znalezienie miejsca na wstawienie list
jest wolne. Rzeczywista wstawka będzie szybsza niż wektor.