Sınıfımdaki öğrenciler, vektörleri kullanmanın daha etkili olduğu zaman bana açıklayamıyor gibi görünüyor, ancak listeleri kullanmamı tavsiye ederken oldukça mutlu görünüyorlar.
Ben böyle anlıyorum
Listeler : Her öğe bir sonraki veya bir önceki öğeye bir adres içerir, bu nedenle bu özellik sayesinde öğeleri sıralanmamış olsalar da rastgele sıralayabilirsiniz, sıra değişmez: belleğiniz parçalanmışsa etkilidir. Ancak başka bir büyük avantajı daha var: Öğeleri kolayca ekleyebilir / kaldırabilirsiniz, çünkü yapmanız gereken tek şey bazı işaretçileri değiştirmek. Dezavantajı: Rasgele tek bir öğeyi okumak için, doğru adresi bulana kadar bir öğeden diğerine atlamanız gerekir.
Vektörler : Vektörler kullanılırken, bellek normal diziler gibi çok daha organize olur: her n. Öğe (n-1). Öğeden hemen sonra ve (n + 1). Öğeden önce saklanır. Neden listeden daha iyi? Çünkü hızlı rastgele erişime izin verir. Nasıl yapılır: bir vektördeki bir öğenin boyutunu biliyorsanız ve bunlar bellekte bitişik ise, n'inci öğenin nerede olduğunu kolayca tahmin edebilirsiniz; istediğinizi okumak için bir listenin tüm öğelerine göz atmanız gerekmez, vektör ile doğrudan okuyabilirsiniz, yapamayacağınız bir listeyle. Öte yandan, vektör dizisini değiştirin veya bir değeri değiştirmek çok daha yavaştır.
Listeler, belleğe eklenebilen / bellekte çıkarılabilen nesneleri izlemek için daha uygundur. Çok sayıda tekli öğeden bir öğeye erişmek istediğinizde vektörler daha uygundur.
Listelerin nasıl optimize edildiğini bilmiyorum, ancak hızlı okuma erişimi istiyorsanız vektörleri kullanmanız gerektiğini bilmelisiniz, çünkü STL listeleri ne kadar iyi bağlarsa, okuma erişiminde vektörden daha hızlı olmayacaktır.