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

leetcode 39: 组合总和

	/*
	* 补充:这里使用了回溯法的思想
	* 关键点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;
    }
};
posted @ 2021-06-15 15:16  shenlei_blog  阅读(97)  评论(0)    收藏  举报