現有乙個陣列(因為unique函式針對相鄰的重複元素進行操作,因此需要有序):
a[10] = ;
unique()有兩個引數,需要去重的陣列的首尾位址,例如上面的a陣列去重,只需unique(a,a+10)即可。
but,unique不是真正意義上的去重,例如上面給出的陣列,經過unique函式之後,會變成:
1 3 4 5 6 7 9 6 7 9
因為,unique函式的去重過程實際上就是不停的把後面不重複的元素移到前面來,也可以說是用不重複的元素占領重複元素的位置
unique()函式返回去重之後不重複序列的下乙個元素的位址,雖然有點繞,來看上面,去重之後不重複序列是1 3 4 5 6 7 9,那麼unique返回的就是上面第二個6
的位址
所以去重之後容器長度並沒有發生變化,我們經常可以配合erase函式使用刪除多餘的元素,例如:
這樣就能真正意義上去重併刪除多餘的元素vector<
int> vec;
vec.
push_back(1
);vec.
push_back(1
);vec.
push_back(1
);vec.
push_back(3
);vec.
push_back(4
);vec.
push_back(5
);vec.
push_back(6
);vec.
push_back(6
);vec.
push_back(7
);vec.
push_back(9
);auto new_end =
unique
(vec.
begin()
, vec.
end())
; vec.
erase
(new_end, vec.
end())
;
C STL unique函式總結
標頭檔案 include 作用 unique的作用是 去掉 容器中相鄰元素的重複元素。解析 unique實質上是乙個偽去除,它並不是真正把重複的元素刪除,而是用不重複的元素把重複的元素覆蓋了,所以總長度其實是不變的。注意,網上有人說是把重複元素移動到末尾,其實並不是,因為如果只是移動的話每種元素的數...
unique 去重函式
unique 函式是乙個去重函式,stl中unique的函式 unique的功能是去除相鄰的重複元素 只保留乙個 還有乙個容易忽視的特性是它並不真正把重複的元素刪除。他是c 中的函式,所以標頭檔案要加 include,具體用法如下 int num 100 unique num,mun n 返回的是n...
unique 去重函式
unique 是c 標準庫函式裡面的函式,位於標頭檔案 include中,其功能是去除相鄰的重複元素 只保留乙個 所以使用前需要對陣列進行排序 該函式的乙個使用方法,對於長度為n陣列arr,unique arr,arr n arr返回的是去重後的陣列長度 那它是怎麼實現去重的呢?刪除?不是,它並沒有...