首頁  >  文章  >  後端開發  >  STL 演算法如何幫助從未排序的向量中刪除重複項?

STL 演算法如何幫助從未排序的向量中刪除重複項?

DDD
DDD原創
2024-11-12 10:39:02230瀏覽

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

從未排序的向量中刪除重複項:STL 演算法的漫步

當面臨從未排序的向量中剔除重複元素的任務時保留初始順序,很容易開始迭代方法,乏味地追蹤和刪除不需要的條目。但等等,還有更好的方法──一條用 STL 演算法鋪就的道路。

STL 去重階梯

STL 擁有強大的演算法庫,包括 std ::copy_if,專為此類場景精心設計。這個神奇的藥水需要一個可迭代的來源(就像你的向量)、一個目的地(你希望重複消失的地方)和一個謂詞來引導選擇過程。

製作重複偵測器

解鎖 std::copy_if 能力的關鍵在於製作一個可以嗅探的自訂謂詞重複。在這裡,我們介紹 NotDuplicate——一個函數對象,它急切地將元素插入到集合中,並採用「集合不能容納所有元素」的神聖原則。當之前遇到過一個元素時,它會優雅地返回 false。

演算法的快速滑動

有了我們值得信賴的 NotDuplicate 謂詞,我們可以呼叫 std::copy_if 來優雅地遍歷我們的向量。每個元素都會呈現給 NotDuplicate,它會參考其已看到的元素集,並且只允許真正的新元素通過。獨特的倖存者滑入目的地容器,留下複製品在數位空間中消亡。

一窺程式碼的恩典

讓我們一窺我們的幕後花絮花絮優雅的解決方案:

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

這個原始程式碼片段召喚NotDuplicate 來協助std::copy_if,快速篩選你的向量並編織一個新的無重複掛毯。

在C 11 的擁抱中

如果你有幸擁有甜蜜的擁抱借助C 11,您可以釋放lambda 的迷人力量,並用簡潔的方式裝飾您的程式碼優雅:

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

重點:演算法,你堅定的盟友

記住,STL 演算法的目的不是把你變成演算法嚮導,而是增強演算法能力你的程式設計能力。擁抱他們豐富的功能,您會發現自己輕鬆有效地釋放了程式碼的全部潛力。

以上是STL 演算法如何幫助從未排序的向量中刪除重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn