Mengapa Tiba-tiba Beralih ke Strategi Atas Bawah dalam std::list<>::sort()?
Dalam Visual Studio 2015 (VS2015), Microsoft menukar strategi pengisihan std::list<>::sort() daripada Isih Gabungan bawah ke atas tradisional kepada pendekatan atas ke bawah. Perubahan ini menghapuskan penggunaan tatasusunan dalaman senarai dan menggunakan iterator untuk menjejaki sempadan larian yang diisih dalam senarai asal.
Sebab Perubahan
Stephan T. Lavavej , pembangun pendekatan atas ke bawah, menyatakan keperluan untuk mengelakkan peruntukan memori dan pembinaan pengagih bukan lalai. VS2015 memperkenalkan pengagih yang tidak lagi boleh dibina secara lalai dan stateful, yang menimbulkan isu apabila menggunakan pendekatan bawah ke atas sebelumnya.
Pelaksanaan Pendekatan Atas-Bawah
Atas -pendekatan bawah menggunakan algoritma rekursif yang membahagikan senarai secara rekursif kepada separuh sehingga ia mencapai kes asas di mana senarai kosong atau mengandungi satu elemen. Fungsi _Isih membahagikan senarai kepada tiga segmen: larian kiri, larian kanan dan lelaran akhir. Logik gabungan dilakukan menggunakan std::list::splice untuk mengalihkan nod dalam senarai asal, mengekalkan keselamatan pengecualian.
Pertimbangan Prestasi
Sementara atas ke bawah pendekatan menangani kebimbangan peruntukan memori, ia datang dengan penalti prestasi berbanding Isih Gabungan bawah ke atas asal. Untuk senarai besar dengan nod berselerak, pendekatan atas ke bawah mengalami kesilapan cache yang meningkat, mengakibatkan masa pelaksanaan yang lebih perlahan. Dalam kes sedemikian, mungkin lebih cepat untuk mengalihkan senarai ke tatasusunan atau vektor, mengisihnya dan mencipta senarai baharu daripada tatasusunan atau vektor yang diisih.
Atas ialah kandungan terperinci Mengapakah `std::list::sort()` Bertukar kepada Isih Gabungan Atas Bawah dalam Visual Studio 2015?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!