我想将v定义为与以下RAIterator指向的元素相同的类型。
template < class RAIterator , class Comparator >
void g_quick_sort_3w_opt (RAIterator beg, RAIterator end, Comparator& cmp)
{
if ((end-beg) < 2)
return;
RAIterator low = beg;
RAIterator hih = end;
RAIterator i = beg;
T v = *beg; //I want T to be the type of an element pointed at by RAIterator
while (!(i == hih))
{
if (cmp(*i , v)) Swap(*low++, *i++);
else if (*i == v) ++i;
else Swap(*i, *--hih);
}
g_quick_sort_3w_opt(beg, low, cmp);
g_quick_sort_3w_opt(hih, end, cmp);
}
交换是来自genalg.h的交换
现在我的测试输入是一个整数列表,如果我使用int而不是T的话,上面的方法就可以工作。
最佳答案
看一下std::iterator_traits
,尤其是reference
和value_type
成员。
typename std::iterator_traits<RAIterator>::value_type v = ...;
typename std::iterator_traits<RAIterator>::reference v = ...;
当然,仅使用自动类型推导可能会为您服务。
auto v = ...; // Beware of proxies