Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mendua dan Menambahkan Vektor pada Diri Sendiri dengan Cekap?

Bagaimana untuk Mendua dan Menambahkan Vektor pada Diri Sendiri dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2024-12-07 01:53:13
asal
772 orang telah melayarinya

How to Efficiently Duplicate and Append a Vector to Itself?

Melampirkan Diri Vektor Cekap

Adakah anda menghadapi keperluan untuk menduplikasi dan menambahkan kandungan vektor pada dirinya sendiri? Jika ya, anda mungkin mencari penyelesaian yang elegan tanpa menggunakan gelung eksplisit.

Walaupun std::vector::insert mungkin kelihatan seperti calon yang sesuai, versi lelaran mempamerkan tingkah laku yang tidak ditentukan jika digunakan dengan *ini sebagai iterator. Selain itu, std::copy sahaja boleh membawa kepada kesalahan pembahagian.

Jangan takut! Terdapat pendekatan yang mudah dan cekap yang melibatkan dua langkah:

  1. Ubah Saiz: Panjangkan kapasiti vektor untuk menampung elemen pendua. Anda boleh menggunakan sama ada ubah saiz atau rizab untuk tujuan ini.
  2. Salin: Gunakan std::copy_n untuk memindahkan elemen asal ke bahagian vektor yang baru diperuntukkan.

Berikut ialah contoh menggunakan ubah saiz:

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

Sebagai alternatif, anda boleh gunakan rizab bersama-sama dengan std::back_inserter:

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

Perhatikan bahawa apabila menggunakan rizab, std::copy_n adalah penting kerana end() menunjuk ke satu melepasi hujung vektor, menjadikannya tidak sah sebagai sisipan titik.

Penyelesaian di atas memastikan bahawa vektor yang terhasil mengandungi unsur asal yang diduplikasi dan dilampirkan pada diri mereka sendiri, mengekalkan integriti elemen sedia ada dan meminimumkan operasi pengagihan semula.

Atas ialah kandungan terperinci Bagaimana untuk Mendua dan Menambahkan Vektor pada Diri Sendiri dengan Cekap?. 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