c++advance() & distance()& unique()

advance:
void advance(pos,n);
1.使名爲pos的input迭代器步進(或步退)n個元素;
2.對Bidirectional迭代器和Random Access迭代器而言,n可爲負值,表示向後退;
3.advance()並不檢查迭代器是否超過序列的end()(因爲迭代器通常不知道其所操作的容器,因此無從檢查)。所以,調用advance()有可能導致未定義行爲----因爲對“序列尾端調用operator++”是一種未定義的操作行爲;
4.此函數總能根據迭代器類型採用最佳方案,這歸功於迭代器特徵的運用。面對Random Access迭代器,此函數只是簡單的調用pos+=n,因此,具有常量複雜度;對於其他任何類型的迭代器則調用++pos(或--pos,如果n爲負)n次,因此對於其他任何類型迭代器,本函數具有線性複雜度。
5.如果需要更換容器或迭代器種類,應該使用advance()而不是operator+=。但是存在“在不提供Random Access迭代器”的容器中,性能變差;6.advance()沒有返回值;
 

distance()
函數distance()用來處理兩個迭代器之間的距離
Dist distance(pos1,pos2);
1.傳回兩個input迭代器pos1和pos2之間的距離;
2.兩個迭代器都必須指向同一個容器;
3.對於random access迭代器,此函數僅僅只是傳回pos2-pos1,因此具備常數複雜度;
4.對於其他迭代器類型,distance()會不斷遞增pos1,直到抵達pos2爲止,然後傳回遞增次數,也就是說其他類型的迭代器,distance()具備線性複雜度,所以對於non-random access迭代器,盡力避免使用此函數;
5.如果需要更換容器型別和迭代器的型別,就應該使用distance()而不是operator-,但是存在對“non-random access迭代器”性能變差的問題,並且第一個迭代器絕對不能位於第二個迭代器之後,否則未定義行爲;
 

 

unique的作用是去掉“容器中相鄰的元素的重複元素(不一定要求數組有序)”,他會把重複的的元素添加到容器末尾,(所以數組大小並沒有改變),而返回值是去重之後的尾地址

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章