我寫了一個函數,它查找任何給定容器中最常見的元素(請參閱下面的代碼),其中輸入是該容器的兩個const_iterator。如果我用findMostFrequent(ivec.begin(), ivec.end())
來調用這個函數,其中ivec
是vector<int>
,編譯器不能推導出模板參數。使用findMostFrequent< vector<int> >(ivec.begin(), ivec.end())
調用函數可以正常工作,但看起來很麻煩。有沒有辦法讓編譯器找出要實例化的模板?如何讓編譯器推導出我的模板迭代器的類型?
template <typename T> typename T::value_type findMostFrequent(typename T::const_iterator beg, typename T::const_iterator end)
{
// T is the type of container, T::value_type is the type which is stored in the container
typename T::size_type current_streak = 0, max_streak = 0;
T::value_type max_so_far;
for (T::const_iterator iter = beg; iter != end; ++iter)
{
current_streak = count(beg, end, *iter);
if (current_streak > max_streak)
{
max_so_far = *iter;
max_streak = current_streak;
}
}
return max_so_far;
}
謝謝!我不知道iterator_traits,但我在這裏找到了一個很好的解釋:http://www.codeproject.com/Articles/36530/An-Introduction-to-Iterator-Traits – physicalattraction 2012-07-17 09:13:47