如何将元素定义为与随机访问迭代器指向的元素相同的类型?

时间:2014-10-10 23:15:49

标签: c++ pointers iterator quicksort

我想将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,上面的工作就可以了。

3 个答案:

答案 0 :(得分:2)

查看std::iterator_traits,尤其是referencevalue_type成员。

typename std::iterator_traits<RAIterator>::value_type v = ...;
typename std::iterator_traits<RAIterator>::reference v = ...;

当然,只需使用自动类型扣除,您就可以获得良好的服务:

auto v = ...; // Beware of proxies

答案 1 :(得分:0)

typename RAIterator::value_type v = *beg;

答案 2 :(得分:0)

使用C ++ 11,您可以使用auto

auto v = *beg;