設計乙個泛型演算法

2021-04-17 14:37:47 字數 1491 閱讀 7729

演算法的目的很簡單,找出小於(大於)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內,我們必須返回乙個指標指向...