Seçiminiz ihtiyaçlarınızı yansıtmalıdır. Vektörlerin tüm öğeleri bellekte süreklidir ve listeler sonraki / önceki öğelere işaret eder, böylece her birinin avantajları / dezavantajları vardır:
Listeler:
- Her öğe, önceki ve sonraki öğeleri işaret etmek için 2 tamsayı alır, bu nedenle en yaygın olarak, listenizdeki her öğe için 8 bayt daha fazladır
- Kesici uç zamanla doğrusal: O (n)
- Kaldır sabit bir işlemdir: O (1)
- X öğesine erişim zaman içinde doğrusaldır: O (n)
Vektörler:
- Daha az hafızaya ihtiyaç duyar (diğer öğelere işaret yoktur, basit bir matematik algoritmasıdır)
- Kaldırma süresi doğrusal: O (n)
- X elemanına erişim sabittir: O (1) (Bunun nedeni elemanların bellekte sürekli olmasıdır, bu yüzden basit bir matematik işlemi vectorPtr + (x * bytesOfTheType))
- Ekleme doğrusal zamanda olabilir, ancak en yaygın olarak sabit bir işlemdir: O (1) (Bunun nedeni bir dizideki vektörün, ancak dizi dolduğunda her zaman kapasitesinin 2 katını ayırmasıdır, böylece dizi kopyası sık değildir)
Bu nedenle, programın öğeleri sık sık eklemesi ve kaldırması gerektiğinde, ancak daha önce diğerlerine ihtiyaç duymadan belirli bir öğeye asla erişmeyin (veya nadiren erişin). Vektör daha iyi erişim süresi için kullanılmalıdır, ancak elemanları çıkarmanız veya eklemeniz gerektiğinde etkinlikten yoksundur.
Stackoverflow'daki bu gönderiyi kontrol edin, ihtiyaçlarınızla ilgili temel soruları içeren, cevaplarınıza bağlı olarak sizi belirli bir konteynere yönlendiren gerçekten güzel bir grafik sunar:
/programming/366432/extending-stdlist