簡體   English   中英

如何將元素定義為與隨機訪問迭代器指向的元素相同的類型?

[英]How can I define an element to be the same type as an element pointed at by a random access iterator?

我想將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 ,尤其是referencevalue_type成員。

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

當然,僅使用自動類型推導可能會對您有幫助:

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

typename RAIterator::value_type v = *beg;

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

auto v = *beg;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM