boost學習之Boost.Lambda
匿名函式 又稱為lambda函式 - 已經在多種程式語言中存在,在Boost.Lambda庫的幫助下,在 C++ 應用中也可以使用它們了。lambda 函式的目標是令原始碼更為緊湊,從而也更容易理解。
Boost.Lambda 提供了幾個結構來定義匿名函式。程式碼就被置於執行的地方,從而省去將它包裝為一個函式再進行相應的函式呼叫的這些開銷。
與 Boost.Bind 相類似,Boost.Lambda 也定義了三個佔位符,名為 _1, _2 和 _3。但與 Boost.Bind 不同的是,這些佔位符是定義在單獨的名字空間的。因此,該例中的第一個佔位符是通過 boost::lambda::_1 來引用的。 為了滿足編譯器的要求,必須包含相應的標頭檔案 boost/lambda/lambda.hpp。
雖然程式碼的位置位於 std::for_each() 的第三個引數處,看起來很怪異,但 Boost.Lambda 可以寫出正常的 C++ 程式碼。 通過使用佔位符,容器 v 的元素可以通過 << 傳給 std::cout 以將它們寫出到標準輸出流。
雖然 Boost.Lambda 非常強大,但也有一些缺點。 要在以上例子中插入換行的話,必須用 "\n" 來替代 std::endl 才能成功編譯。 因為一元 std::endl 模板函式所要求的型別不同於 lambda 函式 std::cout << boost::lambda::_1 的函式,所以在此不能使用它。
// boostConsole.cpp : 定義控制檯應用程式的入口點。
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/if.hpp>
using namespace std;
using namespace boost;
void print(int i)
{
cout << i << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(2);
//輸出到標準輸出流
for_each(v.begin(), v.end(), print);
//將元素輸出到標準輸出流
for_each(v.begin(), v.end(), cout << lambda::_1 << "\n");
//將大於1的元素輸出到標準輸出流
for_each(v.begin(), v.end(), lambda::if_then(lambda::_1 > 1, cout << lambda::_1 << "\n"));
getchar();
return 0;
}
相關文章
- boost庫學習筆記筆記
- boost.coroutine學習筆記筆記
- Boost Test學習總結(C++)C++
- boost學習之RAII機制(資源申請即初始化)AI
- BOOST庫 學習參考完全開發指南
- boost之ThreadPoolthread
- 前端學習之Bootstrap學習前端boot
- 學而習之,成就學習
- boost原始碼剖析----boost::any原始碼
- Boost練習程式(multi_index_container)IndexAI
- boost and windowsWindows
- Java學習之LinkedHashMap學習總結JavaHashMap
- 機器學習之學習速率機器學習
- GO 之 Goroutine 學習Go
- NodeAPI學習之BufferAPI
- nginx學習之模組Nginx
- MySQL學習之索引MySql索引
- Qt學習之XMLQTXML
- HIVE學習之(三)Hive
- Java學習之介面Java
- VUE學習之lessVue
- DSI之lock學習
- MySQL學習之explainMySqlAI
- React學習之HookReactHook
- React 學習之 createElementReact
- boost library
- Java學習之陣列練習Java陣列
- Java學習之反射篇Java反射
- Xdoclet之學習經歷
- 學習JS原理之BFCJS
- 機器學習之學習曲線機器學習
- git學習之git rebaseGit
- MySQL之檢視學習MySql
- opencv學習之基礎OpenCV
- 強化學習之CartPole強化學習
- golang學習之路 之mapGolang
- Java 容器學習之 HashMapJavaHashMap
- Hive學習之基本操作Hive