2015-12-31 84 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 –