Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Anda Boleh Mendua dan Menambah Kandungan Vektor dengan Cekap Tanpa Menggunakan Gelung?

Bagaimanakah Anda Boleh Mendua dan Menambah Kandungan Vektor dengan Cekap Tanpa Menggunakan Gelung?

Patricia Arquette
Lepaskan: 2024-11-28 00:52:12
asal
653 orang telah melayarinya

How Can You Efficiently Duplicate and Append Vector Contents Without Using Loops?

Mendua dan Menambah Kandungan Vektor Dengan Berkesan

Apabila bekerja dengan vektor, selalunya perlu untuk menduplikasi elemen dan menambahkannya pada penghujung vektor asal. Ini boleh menjadi rumit tanpa menggunakan gelung.

Cabaran dengan Penyelesaian Berulang

Kaedah seperti std::vector::insert() tidak sesuai untuk tugas ini kerana iterator untuk vektor mungkin menjadi tidak sah semasa sisipan.

Pendekatan Lebih Bersih Menggunakan Ubah Saiz dan Copy_n

Penyelesaian yang lebih elegan melibatkan dua langkah:

  1. Ubah Saiz Vektor: Gunakan resize() atau reserve() untuk memperuntukkan memori untuk elemen pendua.
  2. Salin Elemen: Gunakan std::copy_n() untuk menyalin elemen asal ke lokasi pendua mereka.

Berikut ialah dua contoh pelaksanaan:

// Using resize() and copy_n()
auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);

// Using reserve() and copy_n() via 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

Dalam mana-mana kes, saiz vektor asal digandakan untuk menampung pendua, dan operasi copy_n() digunakan untuk memindahkan elemen. Adalah penting untuk mengingati saiz vektor asal sebelum mengubah saiz dan menggunakan reserve() dengan copy_n(), kerana lelaran end() menghala ke hujung vektor selepas pengagihan semula.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mendua dan Menambah Kandungan Vektor dengan Cekap Tanpa Menggunakan Gelung?. 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