如何创建lambda
函数,接受iterators
为vector
,list
,array
? 喜欢的东西:Lambda将迭代器作为参数
auto do_somthing=[](iterator beg,iterator end){
//code here
}
如何创建lambda
函数,接受iterators
为vector
,list
,array
? 喜欢的东西:Lambda将迭代器作为参数
auto do_somthing=[](iterator beg,iterator end){
//code here
}
@rollbear用C++ 14回答了这个问题,使用了一个通用的lambda表达式。在C++ 11中,您可以手动编写这样的“通用lambda:”
struct GenericLambda
{
template <class It>
void operator() (It beg, It end) { /*:::*/ }
} do_something;
如果使用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));
太棒了!然而,我坚持使用C++ 11 –
@HumamHelfawi然后我担心你没有多少希望,唉。 – rollbear
如果你只限于C++ 11,和你需要的通用拉姆达因为你在一个模板函数,其中容器是一个模板参数的时候,那么你就可以得到迭代器类型是这样的:
template<class T>
void foo()
{
using iterator = typename T::iterator;
auto lambda = [](iterator beg,iterator end){}
}
好方法。但是,这不是我的情况。我处于非模板化函数中,但需要使用模板化的lambda –
只需编写它即可。你能提供一些更多的背景吗? – Downvoter
我该怎么做?我不能只声明参数为迭代器? –
我的意思是什么在里面假设有std :: sort(beg,end) –