這個函數的功能就是刪除相鄰的重複元素,而後從新排列輸入範圍內的元素,並返回一個最後一個無重複值的迭代器(並不改變容器長度)。函數
例如:spa
1 vector<int>q(10); 2 for(int i = 0; i < 10; i++){ 3 q[i] = (i*i + i*i*i) % 5; 4 cout << q[i] << " "; 5 } 6 cout << endl; 7 sort(q.begin(),q.end()); 8 9 for(int i = 0; i < 10; i++) 10 cout << q[i] << " "; 11 cout << endl; 12 13 int tot = unique(q.begin(),q.end()) - q.begin(); 14 15 for(int i = 0; i < 10; i++) 16 cout << q[i] << " "; 17 18 cout << endl; 19 cout << tot << endl;
運行結果爲code
unique返回的是迭代器,但咱們減去容器首位置就能夠獲得無重複的長度了。還有就是使用unique函數前得排序(或者保證容器是有序的),由於它往相鄰位置查找有無重複,unique函數徹底等價於下面這個函數。blog
1 iterator My_Unique (iterator first, iterator last){ 2 if (first==last) return last; 3 4 iterator result = first; 5 while (++first != last){ 6 if (!(*result == *first)) 7 *(++result)=*first; 8 } 9 return ++result; 10 }
能夠看的出unique的工做流程是吧不重複的元素往前移,並非把重複元素日後移動,還有就是記得使用unique必定要保證有序!排序
知道了unique函數就能夠利用這個函數作不少事情了,好比和erase函數達到刪除重複元素的目的等等。工作流
功能和unique同樣,可是多了一個copy,函數有三個參數,首位置、末位置和另外一個容器,例如:it
1 vector<int>q(10),vec; 2 for(int i = 0; i < 10; i++){ 3 q[i] = (i*i + i*i*i) % 5; 4 cout << q[i] << " "; 5 } 6 cout << endl; 7 sort(q.begin(),q.end()); 8 9 for(int i = 0; i < 10; i++) 10 cout << q[i] << " "; 11 cout << endl; 12 13 unique_copy(q.begin(),q.end(),back_inserter(vec)); 14 15 for(int i = 0; i < 10; i++) 16 cout << q[i] << " "; 17 cout << endl; 18 19 for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++){ 20 cout << *it << " "; 21 } 22 cout << endl;
運行結果爲ast
能夠發現,函數操做是拷貝到另外一個容器中了,並不改變當前容器的元素順序。class
值得一提的就是unique_copy沒有返回值,不能直接得出有幾個不重複元素。容器