一、unique函數的定義和用途
1、unique函數的定義
template ForwardIterator unique(ForwardIterator first, ForwardIterator last);
2、unique函數的用途
unique函數用於去除一個區間內相鄰的重複元素,並返回去重後的最後一個元素的後一個位置。
unique函數只能去除相鄰的重複元素,對於不相鄰的重複元素無法去重,需要配合sort函數或者stable_sort函數使用。
二、unique函數的使用方法
1、使用unique函數去除重複元素
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> vec{1, 2, 3, 4, 4, 5, 5, 6}; vec.erase(unique(vec.begin(), vec.end()), vec.end()); for (auto i : vec) { cout << i << " "; } return 0; }
上述代碼將會輸出”1 2 3 4 5 6″,其中unique函數去除了相鄰的重複元素。
2、結合sort函數使用去除不相鄰的重複元素
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> vec{5, 4, 2, 3, 1, 4, 5, 6}; sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end()); for (auto i : vec) { cout << i << " "; } return 0; }
上述代碼將會輸出”1 2 3 4 5 6″,其中sort函數將vec從小到大排序,unique函數去除了全部重複元素(不相鄰的重複元素也被去除了)。
三、unique函數的注意事項
1、unique函數只對相鄰的重複元素生效,對於一個區間內不相鄰的重複元素需要先使用sort函數排序。
2、unique函數將去重後的元素移動到了區間的最前端,需要再使用vector的erase函數刪除多餘的元素。
3、去重後的元素並沒有被刪除,而是被移動到了區間的最前端,函數返回值為去重後的最後一個元素的後一個位置。
4、unique函數只對連續的重複元素去重,對於非連續的重複元素無效。
四、unique函數的適用範圍
1、unique函數適用於希望快速地去重一個區間內的相鄰重複元素的場景。
2、unique函數適用於有明確排序規則的場景,對於不同的排序方式得到的結果可能有所不同。
五、unique函數的代碼示例
下面是一個完整的代碼示例:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { // 1、使用unique函數去除重複元素 vector<int> vec1{1, 2, 3, 4, 4, 5, 5, 6}; vec1.erase(unique(vec1.begin(), vec1.end()), vec1.end()); for (auto i : vec1) { cout << i << " "; } cout << endl; // 2、結合sort函數使用去除不相鄰的重複元素 vector<int> vec2{5, 4, 2, 3, 1, 4, 5, 6}; sort(vec2.begin(), vec2.end()); vec2.erase(unique(vec2.begin(), vec2.end()), vec2.end()); for (auto i : vec2) { cout << i << " "; } cout << endl; return 0; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309006.html