源於《挑戰程式設計競賽》第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...