C++笔记——仿函数和lambda函数
ceres里面用到仿函数,故单独测试一下用法
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; class LessThenLenFunctor{ public: bool operator()(const string& str){ return str.length() < len; } //构造函数 LessThenLenFunctor(int l):len(l){}; private: int len; }; int main() { vector<string> sVec{"aegew", "ssftat", "12"}; int cnt = count_if(sVec.begin(), sVec.end(),LessThenLenFunctor(6)); cout << cnt << endl; }
可以让LessThenLenFunctor类作为一个函数被使用,其中类的成员变量作为这个函数的参数,具有较大的灵活性。
参考:https://blog.csdn.net/codedoctor/article/details/79654690
另外,也可以通过lambda(匿名函数)来实现相同的功能
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; class LessThenLenFunctor{ public: bool operator()(const string& str){ return str.length() < len; } //构造函数 LessThenLenFunctor(int l):len(l){}; private: int len; }; int main() { vector<string> sVec{"aegew", "ssftat", "12"}; int x = 6; // int cnt = count_if(sVec.begin(), sVec.end(),LessThenLenFunctor(6)); int cnt = count_if(sVec.begin(), sVec.end(), [x](string str){return str.length() < x;}); cout << cnt << endl; }
关于lambda的使用,https://blog.csdn.net/bajianxiaofendui/article/details/86583612,这里讲的比较清楚,自己也可以验证一下。
作者:水水滴答
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。