Rumah > pembangunan bahagian belakang > C++ > Push_back vs. Emplace_back: Bilakah Anda Harus Menggunakan Setiap dalam C ?

Push_back vs. Emplace_back: Bilakah Anda Harus Menggunakan Setiap dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-23 09:47:29
asal
851 orang telah melayarinya

Push_back vs. Emplace_back: When Should You Use Each in C  ?

Push_back vs Emplace_back: Analisis Yang Lebih Dalam

Pengenalan

Perbezaan antara push_back dan emplace_back operasi dalam C sering menjadi punca kekeliruan. Kedua-dua fungsi digunakan untuk memasukkan elemen ke dalam bekas, tetapi ia berbeza dalam kelakuannya, terutamanya apabila bekerja dengan rujukan nilai.

Memahami Push_back

push_back mempunyai tiga lebihan: satu mengambil nilai const, satu mengambil rujukan rnilai, dan satu lagi yang mengambil bilangan hujah variadic (C 11 seterusnya). Dalam konteks rujukan rvalue, push_back(Type&& _Val) berkelakuan seperti yang diharapkan: ia terus memasukkan rujukan rvalue ke dalam bekas tanpa membuat salinan.

Emergence of Emplace_back

Microsoft Visual C (MSVC) memperkenalkan versi yang kelihatan berlebihan emplace_back yang mengambil rujukan rnilai: emplace_back(Jenis&& _Val). Lebihan beban ini berlebihan kerana fungsinya bersamaan dengan push_back(Jenis&& _Val) apabila digunakan dengan rujukan nilai.

Kuasa Sebenar Emplace_back

Yang benar potensi emplace_back terletak pada beban variadicnya: emplace_back(Args&&...). Tidak seperti push_back, beban berlebihan ini membenarkan pembinaan langsung objek dalam bekas menggunakan argumen yang dimajukan. Ini menghapuskan keperluan untuk mencipta objek sementara dan potensi untuk penyalinan yang tidak perlu.

Bila Menggunakan Emplace_back

emplace_back amat berguna dalam situasi di mana mencipta objek sementara akan dikenakan bayaran yang ketara atas kepala. Contohnya, apabila memasukkan objek kompleks ke dalam peta standard:

std::map<int, Complicated> m;
int anInt = 4;
double aDouble = 5.0;
std::string aString = "C++";

// Avoids creating temporary objects
m.emplace(4, anInt, aDouble, aString);
Salin selepas log masuk

Pelaksanaan Separa MSVC

Walaupun memperkenalkan lebihan emplace_back bukan standard untuk rujukan nilai, MSVC masih belum melaksanakan versi variadic penuh. Sebab di sebalik ini ialah kekurangan sokongan templat variadic dalam Visual C 10 pada masa itu.

Atas ialah kandungan terperinci Push_back vs. Emplace_back: Bilakah Anda Harus Menggunakan Setiap dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan