演算法的目的很簡單,找出小於(大於)elem_size的元素並列印.
先貼上**:
#include
<
algorithm
>
//泛型演算法
#include
<
functional
>
//function object
#include
<
vector
>
#include
<
iostream
>
using
namespace
std;
template
<
typename inputiterator,typename outputiterator,
typename elemtype, typename comp
>
outputiterator
filter(inputiterator first,inputiterator last,
outputiterator at,
const
elemtype
&val,comp pred)
return
at;}
intmain();
intia2[elem_size];
//vector測試
vector
<
int>
ivec(ia,ia
+elem_size);
vector
<
int>
ivec2(elem_size);
cout
<<
"less than 8 ";
filter(ia,ia
+elem_size,ia2,elem_size,less
<
int>
());
cout
<<
"greater than 8 ";
filter(ivec.begin(),ivec.end(),ivec2.begin(),elem_size,greater
<
int>
());
return0;
} 幾點說明:
1.函式與元素型別無關,與比較操作無關,更和容器型別無關,這樣,函式就初步轉化為乙個泛型演算法了.
2.function object adapter 會對 function object 進行修改操作.上例中bind2nd會將指定值繫結至第二運算元,即val成為pred function object的第二個引數,同理bind1st將指定值繫結至第一運算元.
3.上例中的outputiterator filter 函式中的outputiterator對應引數並沒有使用引用,因為cout操作是在此函式內進行,所以不需要使用物件的引用.
如何設計乙個泛型演算法
include include include include include using namespace std 下面我們的新任務。使用者給乙個整數 vector 我們必須返回乙個新的 vector 其中內含原 vector 之中小於 10 的所有數值 乙個快速但缺乏通用性的解法是 vecto...
C 泛型設計的乙個小陷阱
距離上次發表部落格已經有幾年了.對於沒能堅持更新部落格,實在是感覺到甚是慚愧.閒言少敘,直接切入主題.最近一直在對於公司乙個網路通訊服務程式使用.net core 進行重構.重構的目的有兩個 一是讓程式能夠跨平台執行.二是優化程式 結構是程式的可維護性有所提公升.重構的過程主要由我來設計底層的架構....
泛型演算法的設計 1
泛型演算法的設計 1 前言 泛型演算法獨立於操作的容器且與要操作的元素型別無關,達到了函式彈性設計的最大化,下面我們一步步的實現乙個泛型演算法 1.有一天,老闆交給你乙個任務,要你程式設計完成如下工作,給定乙個儲存整數的vector,及乙個整數,如果此值存在於vector內,我們必須返回乙個指標指向...