1.STL智能函数指针
#include <functional>
void test1(const std::string& s) {
std::cout << "test1:" << s << '\n';
}
class ATestClass{
public:
void test2(const std::string& s) {
std::cout << "test2:" << s << '\n';
}
};
typedef std::function<void(const std::string&)> FunPtr;
FunPtr f = std::bind(&ATestClass::test2, this,std::placeholders::_1);
/*
或者可以这样表示
*/
auto fun = std::bind(&ATestClass::test2, this,std::placeholders::_1);
f("4396");
fun("2800");
f = std::bind(&test1, std::placeholders::_1);
f(str);
2.容器阶乘
#include <iostream>
#include <vector>
#include <string>
#include <numeric>
int main()
{
std::vector<int> ivec = { 8, 1, 1, 1 };
std::vector<std::string> colors = { "red","green","blue" };
/// 自定义计算方法
auto calc = [](auto op1, auto op2) { return op1 + op2; };
std::cout << "加法1: "
<< std::accumulate(ivec.begin(),
ivec.end(),
0,
calc)
<< "\n";
std::cout << "加法2: "
<< std::accumulate(ivec.begin(),
ivec.end(),
0,
std::plus<int>())
<< "\n";
std::cout << "减法: "
<< std::accumulate(ivec.begin(),
ivec.end(),
0,
std::minus<int>())
<< "\n";
std::cout << "乘法 : "
<< std::accumulate(ivec.begin(),
ivec.end(),
1,
std::multiplies<int>())
<< "\n";
std::cout << "string 加法 : "
<< std::accumulate(colors.begin(),
colors.end(),
std::string(""),
calc)
<< "\n