2014-02-26 37 views
1

我想使用一个函数,它要求参数是一个迭代器,可以将它应用于std :: for_each这样的STL算法吗?在目标函数中使用迭代器的STL算法

std::vector<int> v({0,1,2,3,4}); 
std::for_each(v.begin(), v.end(), [](std::vector<int>::iterator it) 
{ 
    // Do something that require using the iterator 
    // ..... 
}); 
+2

'的std :: for_each'将传递一个对象从容器中,而不是迭代器。您应该使用使用迭代器的显式循环。从它制作一个功能(可能是模板)。 – maverik

回答

1

您可以轻松地创建自己的“实现”,将迭代器传递给该函数。

namespace custom { 
template<class InputIterator, class Function> 
    Function for_each(InputIterator first, InputIterator last, Function fn) 
{ 
    while (first!=last) { 
    fn (first); 
    ++first; 
    } 
    return fn; 
} 
} 

std::vector<int> v({0,1,2,3,4}); 
custom::for_each(v.begin(), v.end(), 
    [](std::vector<int>::iterator it) 
    { 
     std::cout << *it << std::endl; 
    }); 

我看不到这样做的好处在一个简单的循环:

for (auto it = v.begin(); it != v.end(); ++it) 
+0

我喜欢STL Alg风格。 – TheVTM