2015-12-31 46 views
3

如何创建lambda函数,接受iteratorsvectorlist,array? 喜欢的东西:Lambda将迭代器作为参数

auto do_somthing=[](iterator beg,iterator end){ 
    //code here 
} 
+0

只需编写它即可。你能提供一些更多的背景吗? – Downvoter

+0

我该怎么做?我不能只声明参数为迭代器? –

+0

我的意思是什么在里面假设有std :: sort(beg,end) –

回答

3

@rollbear用C++ 14回答了这个问题,使用了一个通用的lambda表达式。在C++ 11中,您可以手动编写这样的“通用lambda:”

struct GenericLambda 
{ 
    template <class It> 
    void operator() (It beg, It end) { /*:::*/ } 
} do_something; 
4

如果使用C++ 14,广义lambda表达式将很好地解决您的问题。

auto do_something = [](auto begin, auto end) { 
    // code here 
}; 

int x[]{ 1, 2, 3, 4 }; 
do_something(std::begin(x), std::end(x)); 
std::set<int> s{3, 4, 12, 55, 98 }; 
do_something(std::begin(s), std::end(s)); 
+0

太棒了!然而,我坚持使用C++ 11 –

+0

@HumamHelfawi然后我担心你没有多少希望,唉。 – rollbear

2

如果你只限于C++ 11,和你需要的通用拉姆达因为你在一个模板函数,其中容器是一个模板参数的时候,那么你就可以得到迭代器类型是这样的:

template<class T> 
void foo() 
{ 
    using iterator = typename T::iterator; 
    auto lambda = [](iterator beg,iterator end){} 
} 
+0

好方法。但是,这不是我的情况。我处于非模板化函数中,但需要使用模板化的lambda –