考慮以下玩具代碼以確定範圍是否包含元素:
template
bool contains1(Iter begin, Iter end, const T& x)
{
for (; begin != end; ++begin)
{
if (*begin == x) return true;
}
return false;
}
(是的,我知道,標準庫中已有完美的算法,但這不是重點。)
我如何用 for_each
和lambda編寫相同的東西?以下不起作用......
template
bool contains2(Iter begin, Iter end, const T& x)
{
std::for_each(begin, end, [&x](const T& y) {
if (x == y) return true;
});
return false;
}
...因為那只會從lambda返回,而不是從函數返回。
我是否必須拋出異常以擺脫lambda?同樣,對於這個特定問題可能有十幾個更好的解決方案,根本不涉及lambda,但這不是我要求的。