C++ 11 - STL - 函式物件(Function Object) (下)
1. 預定義函式物件
C++標準庫內含許多預定義的函式物件,也就是內建的函式物件。
你可以充分利用他們,不必自己費心去寫一些自己的函式物件。
要使用他們,你只要包含如下標頭檔案
#include <functional>
eg:
set<int, less<int>> coll; // sort elements with <
set<int, greater<int>> coll; // sort elements with >
predefinedFuncObjectTest.cpp
deque<int> coll = { 1, 2, 3, 5, 7, 11, 13, 17, 19 }; PRINT_ELEMENTS(coll, "initialized: "); // negate all values in coll transform(coll.cbegin(), coll.cend(), // source coll.begin(), // destination negate<int>()); // operation PRINT_ELEMENTS(coll, "negated: "); // square all values in coll transform(coll.cbegin(), coll.cend(), // first source coll.cbegin(), // second source coll.begin(), // destination multiplies<int>()); // operation PRINT_ELEMENTS(coll, "squared: ");
執行結果:
---------------- predefinedFuncObject(): Run Start ----------------
initialized: 1 2 3 5 7 11 13 17 19
negated: -1 -2 -3 -5 -7 -11 -13 -17 -19
squared: 1 4 9 25 49 121 169 289 361
---------------- predefinedFuncObject(): Run End ----------------
2. 預定義函式物件繫結
你可以使用binder將預定義函式物件和其他數值進行繫結。
pdFuncObjectBind.cpp
using namespace std::placeholders; set<int, greater<int>> coll1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; deque<int> coll2; // Note: due to the sorting criterion greater<>() elements have reverse order: PRINT_ELEMENTS(coll1, "initialized: "); // transform all elements into coll2 by multiplying them with 10 transform(coll1.cbegin(), coll1.cend(), // source back_inserter(coll2), // destination bind(multiplies<int>(), _1, 10)); // operation PRINT_ELEMENTS(coll2, "transformed: "); // replace value equal to 70 with 42 replace_if(coll2.begin(), coll2.end(), // range bind(equal_to<int>(), _1, 70), // replace criterion 42); // new value PRINT_ELEMENTS(coll2, "replaced: "); // remove all elements with values between 50 and 80 coll2.erase(remove_if(coll2.begin(), coll2.end(), bind(logical_and<bool>(), bind(greater_equal<int>(), _1, 50), bind(less_equal<int>(), _1, 80))), coll2.end()); PRINT_ELEMENTS(coll2, "removed: ");
執行結果:
---------------- pdFuncObjectBind(): Run Start ----------------
initialized: 9 8 7 6 5 4 3 2 1
transformed: 90 80 70 60 50 40 30 20 10
replaced: 90 80 42 60 50 40 30 20 10
removed: 90 42 40 30 20 10
---------------- pdFuncObjectBind(): Run End ----------------
相關文章
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- Javascript 物件導向學習1 Function function ObjectJavaScript物件FunctionObject
- C++中的虛擬函式(virtual function)C++函式Function
- 函式(FUNCTION)函式Function
- C++物件模型:objectC++物件模型Object
- C++中函式指標與函式物件C++函式指標物件
- c++內建函式物件C++函式物件
- JS function 是函式也是物件, 淺談原型鏈JSFunction函式物件原型
- JavaScript function 函式JavaScriptFunction函式
- C++ 常物件和常函式C++物件函式
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- C++ lambda 表示式與「函式物件」(functor)C++函式物件
- oracle function函式castOracleFunction函式AST
- JS:1.3,函式(function)JS函式Function
- 淺析stl仿函式函式
- C++中的函式指標和函式物件總結C++函式指標物件
- c++回撥函式(下)C++函式
- C++ 11: function & bind 使用示例C++Function
- C++繼承三之純虛擬函式pure virtual functionC++繼承函式Function
- Java 8 Function 函式介面JavaFunction函式
- js的函式function(一)JS函式Function
- javascript Function()建構函式JavaScriptFunction函式
- PL/SQL 06 函式 functionSQL函式Function
- deterministic function 函式索引Function函式索引
- SQL 自定義函式FUNCTIONSQL函式Function
- STL程式設計實踐七:儘量定義class形式的Function Object (轉)程式設計FunctionObject
- C++入門教程(11):呼叫函式C++函式
- C++永久物件儲存 (Persistent Object Storage for C++) (轉)C++物件Object
- JavaScript入門-函式function(二)JavaScript函式Function
- Function(函式分享)第二節Function函式
- pipeline function管道函式Function函式
- JavaScript Function 函式深入總結JavaScriptFunction函式
- function.procedure函式下的過程執行問題Function函式
- STL容器的各個函式方法函式
- 函式物件、物件、原型函式物件原型
- <> 第1篇 認識C++的函式和物件C++函式物件
- 實現call函式,手寫Function.prototype.call函式函式Function
- C++ 可呼叫物件的概念 callable objectC++物件Object