Rumah >pembangunan bahagian belakang >C++ >`push_back` lwn. `emplace_back`: Bilakah Saya Perlu Menggunakan Yang Mana dalam C ?
push_back vs emplace_back: Penjelasan Komprehensif
Dalam C , terdapat dua kaedah untuk menambah elemen pada bekas: push_back dan emplace_back. Walaupun kedua-duanya mempunyai tujuan yang sama, terdapat perbezaan halus dalam tingkah laku mereka yang sering membawa kepada kekeliruan.
Tolak_balik terlampau beban
Kaedah tolak_balik mempunyai tiga lebihan beban:
void push_back(const Type& _Val); void push_back(Type& _Val); void push_back(Type&& _Val);
Lebihan pertama mengambil rujukan yang berterusan, yang kedua mengambil rujukan, dan yang ketiga mengambil rujukan nilai. Lebihan rujukan nilai telah diperkenalkan untuk memudahkan semantik pergerakan, membolehkan pemasukan objek sementara yang cekap.
emplace_back
Kaedah emplace_back hanya mempunyai satu beban:
void emplace_back(Type& _Val);
Lebihan ini memerlukan rujukan nilai. Walau bagaimanapun, tidak seperti kelebihan tolak_balik ketiga, emplace_back sebenarnya tidak memasukkan nilai; sebaliknya, ia membina objek baharu terus ke dalam bekas.
Tujuan emplace_back
Tujuan emplace_back menjadi jelas apabila mempertimbangkan pengehadan push_back. Walaupun kelebihan push_back ketiga membolehkan pemasukan objek sementara yang cekap, ia masih memerlukan penciptaan sementara. Ini boleh menyebabkan salinan atau pergerakan yang tidak perlu, terutamanya apabila bekerja dengan objek yang kompleks.
emplace_back, sebaliknya, mengelakkan penciptaan sementara dengan membina objek terus ke dalam bekas. Ini amat berfaedah dalam situasi di mana membina objek melibatkan berbilang operasi atau pengiraan yang mahal. Sebagai contoh, pertimbangkan kod berikut:
std::vector<Complicated> v; Complicated obj(4, 5.0, "C++"); v.push_back(obj); // Creates a temporary copy v.emplace_back(4, 5.0, "C++"); // Constructs directly into the vector
Dalam kes ini, menggunakan push_back memerlukan penciptaan salinan sementara obj, yang kemudiannya dimasukkan ke dalam vektor. Menggunakan emplace_back menghapuskan keperluan untuk salinan sementara, menghasilkan kecekapan yang lebih baik.
Kesimpulan
Walaupun kedua-dua push_back dan emplace_back boleh digunakan untuk menambah elemen pada bekas, emplace_back menawarkan penyelesaian yang lebih cekap apabila membina objek kompleks atau sementara terus ke dalam bekas. Memahami perbezaan antara kaedah ini boleh membawa kepada prestasi yang lebih baik dan kebolehbacaan kod dalam aplikasi C.
Atas ialah kandungan terperinci `push_back` lwn. `emplace_back`: Bilakah Saya Perlu Menggunakan Yang Mana dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!