如何創建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) –