使用unique來刪除重複元素

2021-10-04 02:13:18 字數 1642 閱讀 2694

c++ stl庫中的algorithm庫包含了乙個unique函式可以用來刪除容器中重複的元素,其只能刪除相鄰近的重複元素,所以如果要使容器中的所有元素都去重,則需要事先對元素進行排序,但這會破壞原先元素的排列順序,此時應該使用另一種方法解決。

unique()原型

template

<

class

forwarditerator

>

forwarditerator unique

(forwarditerator fist, forwarditerator last)

;template

<

class

forwarditerator

,class

binarypredecate

>

forwarditerator unique

(forwarditerator fist, forwarditerator last, binarypredicate pred)

;

unique()函式將[first, last)區間中由兩個或更多相同元素構成的序列壓縮成為乙個元素,並返回新區間的超尾迭代器。第乙個版本使用值型別的= =運算子對元素進行比較(如果元素是結構體或者類,需要事先過載= =運算子);第二個版本使用二元謂詞函式物件pred來比較元素。也就是說,如果pred(*it1, *it2)為true,則t1和t2指向的元素是匹配的。

// 假如元素的型別為student

bool

pred

(student t1, studentt2)

unique函式的去重過程實際上就是不停的把後面不重複的元素移到前面來,也可以說是用不重複的元素占領重複元素的位置。函式的返回值是乙個迭代器,它指向的是去重後容器中不重複序列的最後乙個元素的下乙個元素。如果不使用erase成員函式進行處理,則元素的個數與最初時一樣,結果會出錯。所以unique需要搭配erase函式進行刪除操作

auto itend =

unique

(str.

begin()

, str.

end();

str.

erase

(itend, str.

end())

;

測試用例
/*

編寫乙個程式,去掉給定字串重複的字元。例如輸入 google 輸出 gole

*/#include

#include

#include

using

namespace std;

intmain()

return0;

}

如果注釋掉erase語句,則會出現如下情況

配合erase刪除掉末尾不需要的元素之後,結果如下

鍊錶刪除重複元素1,刪除重複元素2,

刪除排序鍊錶中的重複元素 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 思路 很簡單。先將兩個指標進行操作,start,end然後判斷end是否等於空即可 definition for s...

STL vector刪除重複元素

stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。刪除重複元素,首先將vector排序。sort vecsrc.begin vecsrc.end 然後使用unique演算法。vecsrc.erase unique vecsrc.begin vecsrc.end vecsrc.e...

STL vector刪除重複元素

stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。刪除重複元素,首先將vector排序。sort vecsrc.begin vecsrc.end 然後使用unique演算法。vecsrc.erase unique vecsrc.begin vecsrc.end vecsrc.e...