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
714 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!

sumber:php.cn
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