Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendua dan Menambahkan Vektor pada Diri Sendiri dengan 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:
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!