Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Algoritma STL Membantu Mengeluarkan Pendua daripada Vektor Tidak Diisih?

Bagaimanakah Algoritma STL Membantu Mengeluarkan Pendua daripada Vektor Tidak Diisih?

DDD
DDDasal
2024-11-12 10:39:02288semak imbas

How do STL Algorithms Help Remove Duplicates from an Unsorted Vector?

Mengalih Keluar Pendua daripada Vektor Tidak Diisih: Berjalan-jalan dengan Algoritma STL

Apabila berhadapan dengan tugas menyiangi elemen pendua daripada vektor yang tidak diisih sambil mengekalkan pesanan awal, tergoda untuk memulakan pendekatan berulang, menjejaki dan mengalih keluar masukan yang tidak diingini dengan membosankan. Tetapi tunggu, ada cara yang lebih baik—laluan yang diturap dengan algoritma STL.

Tangga STL untuk Penyingkiran Pendua

STL mempunyai senjata algoritma yang kuat, termasuk std ::copy_if, direka dengan teliti untuk senario sedemikian. Ramuan ajaib ini mengambil sumber yang boleh diubah (seperti vektor anda), destinasi (di mana anda mahu pendua hilang) dan predikat untuk membimbing proses pemilihan.

Membuat Pengesan Pendua

Kunci untuk membuka kunci std::copy_if kehebatan terletak pada mencipta predikat tersuai yang menghidu pendua. Di sini, kami memperkenalkan NotDuplicate—objek fungsi yang tidak sabar-sabar memasukkan elemen ke dalam set dan menggunakan prinsip suci bahawa "satu set tidak boleh memuatkan mereka semua." Ia kembali palsu apabila elemen telah ditemui sebelum ini.

Leret Pantas Algoritma

Dengan predikat NotDuplicate yang boleh dipercayai di tangan, kami boleh menggunakan std::copy_if to melintasi vektor kami dengan elegan. Setiap elemen dibentangkan kepada NotDuplicate, yang merujuk kepada set elemen yang dilihat dan hanya memberikan laluan kepada pendatang baharu yang bona fide. Mereka yang terselamat yang unik meluncur ke dalam bekas destinasi, meninggalkan pendua untuk binasa dalam kekosongan digital.

Semak Ke dalam Rahmat Kod

Mari kita mengintip di sebalik tabir kami penyelesaian yang elegan:

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             std::ref(pred));

Saman coretan kod murni ini NotDuplicate untuk membantu std::copy_if, menapis vektor anda dengan pantas dan menganyam permaidani bebas pendua baharu.

Dalam Pelukan C 11

Jika anda diberkati dengan pelukan manis C 11, anda boleh melepaskan kuasa menawan lambdas dan hiasi kod anda dengan sentuhan keanggunan ringkas:

std::vector<int> uniqueNumbers;
std::copy_if(numbers.begin(), numbers.end(),
             std::back_inserter(uniqueNumbers),
             [](const int& element) {
                return s_.insert(element).second; // true if s_.insert(element);
             });

The Takeaway: Algorithm, Your Stalwart Allies

Ingat, tujuan algoritma STL bukan untuk membelok anda menjadi ahli sihir algoritma tetapi untuk menambah kehebatan pengaturcaraan anda. Hayati permaidani mereka yang kaya dengan fungsi, dan anda akan mendapati diri anda membuka kunci potensi penuh kod anda dengan mudah dan cekap.

Atas ialah kandungan terperinci Bagaimanakah Algoritma STL Membantu Mengeluarkan Pendua daripada Vektor Tidak Diisih?. 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