Rumah >pembangunan bahagian belakang >C++ >Adakah Perubahan Antara Muka `std::vector::resize()` C 11 Secara Berkesan Nilai-Memulakan Elemen Baharu?
Dalam C 03, std::vector
Menggunakan Boost.Vektor kontena
Walau bagaimanapun, dalam mod C 11, kedua-dua std::vector dan Boost.Container's vector masih dimulakan elemen baharu dengan sifar apabila menggunakan lebihan yang bertujuan untuk permulaan nilai. Ini menimbulkan persoalan:
Adakah perubahan antara muka C 11 std::vector::resize() benar-benar berkesan?
Hasilnya menunjukkan bahawa perubahan antara muka tidak mempunyai kesan yang dimaksudkan, kerana elemen baharu masih dimulakan dalam kedua-dua pelaksanaan.
Tambahan
Kepada menangani had pengalokasi sedia ada, penyesuai pengalokasi alternatif telah dicadangkan yang menyediakan cara yang lebih selamat dan boleh dipercayai untuk mencapai pemulaan nilai tanpa memulakan semua jenis elemen:
template <typename T, typename A=std::allocator<T>> class default_init_allocator : public A { // ... implementation };
Penyesuai ini berselang pada construct() panggilan untuk permulaan nilai, mengubahnya menjadi panggilan permulaan lalai. Ia juga mengendalikan permulaan lalai dengan betul.
Atas ialah kandungan terperinci Adakah Perubahan Antara Muka `std::vector::resize()` C 11 Secara Berkesan Nilai-Memulakan Elemen Baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!