函式物件,一元謂詞,二元謂詞,預定義函式物件

2021-08-17 11:54:02 字數 2451 閱讀 6687

find_if  ,  sort ,  for_each 的使用 for_each(v1.begin(), v1.end(), showelemt() ) ;  要使用預定義函式物件需要包含 functional 標頭檔案
vector::iterator it = find_if(v1.begin(), v1.end(), myint )  sort(v3.begin(),v3.end(),compare) ; // 按從大到小(遞減)排序
#include #include #include using namespace std ; 

//定義函式物件 (過載函式運算子的類)

template class showelem

void operator()(t &t)

void printn()

protected:

private:

int n ;

};void show(int & a)

int main()

//showelemshowelemt ;

//showelemt(a) 函式物件的() 執行像乙個函式//仿函式

一元謂詞:函式引數乙個,函式返回值是bool型別 ; 二元謂詞:函式引數二個,函式返回值是bool型別

find_if  返回的是乙個迭代器。使用案例:

#include #include #include using namespace std ; 

template class lv

bool operator()(t &t)

protected :

private :

t dis ;

};int main()

int a = 3 ;

lvmyint(a) ;

vector::iterator it = find_if(v1.begin(), v1.end(), myint ) ; // 返回的是迭代器

cout << *it ;

} // 程式輸出的是 vector中第乙個能被3整除的數。

二元謂詞使用場景:可對兩個物件進行操作,(+ - * / 或者是大小比較)

下面是二元函式物件的案例

#include #include #include using namespace std ; 

//定義函式物件

template class showelem

void operator()(t &t)

void printn()

protected:

private:

int n ;

};template class sumadd

protected :

private :

t dis ;

};int main()

int a = 3 ;

v3.resize(10) ;

transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), sumadd( )) ; // 返回的是迭代器

for_each(v3.begin(),v3.end(),showelem()) ;

}

二元謂詞的案例:

#include #include #include using namespace std ; 

//定義函式物件

template class showelem

void operator()(t &t)

void printn()

protected:

private:

int n ;

};template class sumadd

protected :

private :

t dis ;

};bool compare(const int &a , const int &b)

int main()

int a = 3 ;

v3.resize(10) ;

transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), sumadd( )) ; // 返回的是迭代器

sort(v3.begin(),v3.end(),compare) ; // 按從大到小(遞減)排序

for_each(v3.begin(),v3.end(),showelem()) ;

}

set.find 函式缺省會區分大小寫,要不區分大小寫,可自己定義乙個仿函式(函式物件) 然後在定義set時

setset1   ;  即可

struct comparenocase

};

C 一元謂詞和二元謂詞

include include 演算法標頭檔案 include include using namespace std 返回型別為bool型別 的operator struct greatstruct for each需要使用的偽函式 template typename t void printer...

C 中二元函式物件和二元謂詞

在c stl演算法中,在演算法的輸入和輸出中,一定要分清是函式物件,還是謂詞,還是迭代器。具體看如下 注意看注釋 includeusing namespace std include string include include include include include 二元函式物件 temp...

find if一元謂詞

find if接受一元謂詞,因此傳遞給find if的可呼叫物件必須接受單一引數。舉個例子 vector vec auto wc find if vec.begin vec.end sz const string words 當中的lambda表示式 sz const string words 轉化...