Bagaimana untuk Memanjangkan Vektor dengan Kandungannya Sendiri dengan Cekap dalam C?

DDD
Lepaskan: 2024-11-11 07:57:02
asal
379 orang telah melayarinya

How to Efficiently Extend a Vector with its Own Content in C  ?

Cara Cekap untuk Memanjangkan Vektor dengan Kandungannya Sendiri

Dalam C , bekas vektor digunakan secara meluas untuk pengurusan memori dinamik. Apabila ia datang untuk menambahkan kandungan vektor pada dirinya sendiri, tanpa menggunakan gelung, pembangun sering mencari penyelesaian yang cekap.

Satu pendekatan melibatkan penggunaan fungsi std::copy. Walau bagaimanapun, seperti yang dinyatakan dalam soalan, ini boleh membawa kepada kesalahan pembahagian. Sebabnya ialah dengan hanya menyalin elemen ke penghujung vektor sedia ada bertindih dengan memori yang diduduki oleh elemen asal.

Penyelesaian yang lebih dipercayai menggunakan gabungan std::resize dan std::copy_n. Coretan kod berikut menunjukkan pendekatan ini:

auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
Salin selepas log masuk

Pendekatan ini berfungsi dengan terlebih dahulu meningkatkan kapasiti vektor menggunakan std::resize. Memandangkan std::resize memperuntukkan semula memori jika perlu, kita perlu mengingati saiz asal menggunakan pembolehubah old_count. Operasi std::copy_n seterusnya menyalin elemen asal ke memori yang baru diperuntukkan, dengan berkesan menduplikasi kandungan vektor.

Alternatif kepada std::resize ialah std::reserve, yang hanya memperuntukkan memori yang mencukupi untuk memegang nombor yang ditentukan daripada unsur. Walau bagaimanapun, selepas menggunakan std::reserve, std::copy_n masih diperlukan kerana iterator akhir menghalakan satu elemen melepasi hujung vektor, menjadikannya tidak sah untuk sisipan.

Adalah penting untuk ambil perhatian bahawa kedua-dua std::insert dan std::push_back mungkin memerlukan pengagihan semula, yang boleh membatalkan iterator dan rujukan sedia ada sebelum titik sisipan. Oleh itu, untuk tujuan menambahkan vektor pada dirinya sendiri tanpa menggunakan gelung, gabungan std::resize atau std::reserve dan std::copy_n menyediakan penyelesaian yang boleh dipercayai dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk Memanjangkan Vektor dengan Kandungannya Sendiri dengan Cekap 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan