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