lambda表達式和for_each,find_if


lambda表達式可以允許我傳遞任意可調用對象,必須要有捕獲列表和函數體,標准形式是[捕獲列表] (參數列表)->return tpye{函數體}

謂詞:一元謂詞指的是只能接受一個傳入參數,二元謂詞指的是接受兩個參數。

如果沒有寫返回類型[](){};這樣有兩種情況:1、函數體類只能有一個return語句,2、如果有多余兩條語句,返回的就是void

有多條語句還想返回其他類型,必須用標准形式eg;[] (int i)->int{if (i>0) return i;else return -i;}

for_each()里面的第三個參數是一個函數,可以是lambda表達式。

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
int main() {
	vector<int> vec(10,1);
	transform(vec.begin(), vec.end(), vec.begin(), [](int i) { return ++i; });
	for_each(vec.begin(), vec.end(), [](int i) {cout << i<<" "; });
	cout << endl;
}

  

	for each(int i in vec)//和上面一樣的結果
		cout << i << " ";
	cout << endl;

2 find_if()可以接受一個謂詞,lambda表達式,count_if也是,這是和find()以及count()的區別;

void count_ifTest() {
	vector<string> vec{"we","happy","lovely"};
	size_t countNum = count_if(vec.begin(), vec.end(), [](const string &s) {return s.size() > 4; });
//統計vec中有多少個字符串大小大於4的 cout << countNum << endl; }

  

3STL算法學習-- for_each( ) 與 transform()

for_each()  對某區間無素執行某種操作.


void print( int &elem)

{

   cout<<elem<<endl;

}

for_each(coll.begin(), coll.end(), print) ;

 回為元素以引用方式傳遞,可以改變區間內的元素,.for_each()還可以返回傳遞進去的函數對像的副本。

 

transform() 對某區間無素執行某種操作.操作返回被改動后的元素 可以將操作的結果放到指定的區間


void fun( int elem)

{

  retun elem*elem;

}


transform(coll.begin(), coll.end(), coll.begin(), fun);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM