2016-12-06 61 views
1

我想定義一個模板函數,它需要兩個迭代器,一個是begin(),另一個是end()。這怎麼能在C++中實現?如何定義在C++中需要兩個迭代器的模板函數?

到目前爲止,我能想到以下幾點:

template <class Iterator> 
typename std::iterator_traits<Iterator>::value_type func(Iterator begin, Iterator end) { 

} 

這是錯的?

回答

1

標準庫傾向於工作的方式(至少以<algorithm>爲例)是允許類型解析稍後發生。所以你會使用:

template <class InputIt, class T> 
T func(InputIt begin, InputIt end) 
{ 
    // ... 
} 
+0

謝謝。我只是對這個'class InputIt,class T'的例子感到困惑。什麼是類InputIT和類T?我在其他地方看過同樣的東西,它讓我感到困惑。 – WorldWideBangers

+2

'InputIt'是用於輸入迭代器的類型,'T'是被返回的類型。迭代器不一定是實際的'iterator'類,它們只需要支持'++',' - '和'*'運算符。例如,原始指針是有效的迭代器。所以不要把你的函數限制爲'iterator'類。如果你正在實現一個搜索/修改函數,最好返回'InputIt'而不是'T',並讓調用者決定如何處理返回的迭代器的值(如果有的話):'template InputIt func(InputIt開始,InputIt結束){...}' –

+0

謝謝@RemyLebeau – WorldWideBangers