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
Mary-Kate Olsenasal
2024-12-07 01:53:13701semak imbas

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);

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));

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!

Kenyataan:
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