2021-6-15 function类模板
类的对象像是C中钩子函数的作用,对象可以直接调用原函数的方法像是函数的别名,一般和lambda表达式一起用的较多
代码样例:
/*
* function< return type<para>> obj;
*/
function <int<int,int>> func=[](int a,int b){return a+b;};
cout<<func(2,3)<<endl; // 5
/*
* 补充:这里使用了回溯法的思想
* 关键点1:回溯法要设置好return 条件
* 关键点2:回溯法每次的操作都需要在递归结束以后回退
* 关键点3:回溯法比较适合的问题:穷举问题
*/
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ret;
vector<int> now;
int sum = 0, n = candidates.size();
//无返回类型,参数只有一个int类型,back是引用
function<void(int) > dfs = [&] (int back) { //dfs绑定lambda表达式
if (sum == target) {
ret.emplace_back(now.begin(),now.end());
} else if (sum > target) return;
else {
for (int i = back; i != n; ++i) {
now.push_back(candidates[i]);
sum += candidates[i];
dfs(i);
sum -= candidates[i];
now.pop_back();
}
}
};
dfs(0);
return ret;
}
};
浙公网安备 33010602011771号