(STL)std unique函式的實現

2021-06-29 01:00:59 字數 1863 閱讀 5387

源於《挑戰程式設計競賽》第164頁程式中呼叫的函式unique, 今天好好看看。 

該函式std::unique位於標頭檔案宣告1如下:

template< class forwardit >

forwardit unique( forwardit first, forwardit last );

宣告2如下:

template< class forwardit, class binarypredicate >

forwardit unique( forwardit first, forwardit last, binarypredicate p );

該函式的作用為: 刪除[first, last)之間所有連續重複的元素, 只保留乙個。 注意, 是連續重複。 要刪除所有重複的元素, 只需要排序之後, 然後呼叫這個函式即可實現。 第乙個版本通過==判斷是否重複, 第二個版本通過二元謂詞p判斷是否重複。 

二元謂詞p, 就是binary predicate which returns ​

true

if the elements should be treated as equal. 

版本1的可能的實現方式:

templateforwardit unique(forwardit first, forwardit last)

}return ++result;

}

所一, 最終返回的乙個迭代器指向任務結束的位置past the end.

版本二的實現方式:

templateforwardit unique(forwardit first, forwardit last, 

binarypredicate p)

}return ++result;

測試程式如下:

#include #include #include using namespace std;

int main() ;

vector::iterator last;

last = unique(ivec.begin(), ivec.end());

for(vector::iterator it = last; it != ivec.end(); ++it)

cout << endl;

// 注意上述的輸出, ivector 的size 並沒有變。

//removes all duplicate elements from a

//vector of integers.

vectorivec2;

sort(ivec2.begin(), ivec2.end());

auto last2 = unique(ivec2.begin(),ivec2.end());

for(const auto &i: ivec2)

cout << endl;

// 刪除last2 到 ivec2.end() 的所以的元素

ivec2.erase(last2, ivec2.end());

// cout << ivec2.capacity() << endl; capacity 仍然為9, 只能用swap釋放占用的記憶體了

for(const auto &i: ivec2)

cout << endl;

// 類似的見unique_copy

return 0;

}

執行結果如下:

函式的用法 Excel函式TREND函式的用法

trend函式是乙個線性趨勢的 函式,在已知y值 x值的條件下,x對應的y值 trend共有4個引數,三個必選引數,乙個可選引數 同樣的一組資料第四引數不同,結果也是有區別的 灰色曲線是由第四引數為false時得到的結果生成的曲線。通過斜率與截距函式我們計算出這兩條曲線的斜率與截距,可以看出,第四引...

main函式的入口函式

作業系統裝載程式之後,首先執行的 並不是main的第一行,而是某些別的 這些 負責準備好main函式執行所需要的環境,並且負責呼叫main函式,執行這些 的函式稱為入口函式或入口點 entry point 視平台的不同而有不同的名字。程式的入口點實際上是乙個程式的初始化和結束部分,它往往是執行庫的一...

返回函式的函式

廖雪峰python課程裡的 作業的兩種實現方法 1.def createcounter a 0 def counter nonlocal a nonlocal 函式是 引用外部函式 的函式 a 1 a 1等同於a a 1 return a return counter countera create...