2014-02-26 71 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