2014-10-08 64 views
0
RAIterator mid = beg + (end-beg)/2; 

使中旬=乞討。我如何從隨機迭代器中獲取中間元素?

RAIterator mid = (beg+end)/2; 

給出一個錯誤

我覺得我失去了一些東西明顯。

我的整個代碼段是從程序

template < class RAIterator , class Comparator > 
    void g_merge_sort (RAIterator beg, RAIterator end, Comparator& cmp) 
    { 
    if (beg == end) 
     return; 

    RAIterator mid = (beg+end)/2; 

    std::cout<<*mid<<std::endl; 

    g_merge_sort(beg, mid, cmp); 

    g_merge_sort(mid, end, cmp); 

    mergesort::Merge (beg, mid, end, cmp); 

    } 

相關定義調用merge_sort遵循

typedef uint32_t ElementType; 

ElementType * data = new ElementType [size]; 

g_merge_sort(data , data + dataStore.Size(), lts); 
+0

第一行代碼是正確的。在下面的聲明中的斷言不是,除了'(end-beg)<2'的情況。 – 2014-10-08 02:41:04

+0

我當然同意,但我的系統不同意。這就是爲什麼我在它下面有cout,它打印第一個元素,然後遞歸調用打印相同的第一個元素,直到它最終出現段錯誤。 – 2014-10-08 02:46:09

+0

這是問題的感謝。這是印刷的第一個因素,因爲它是如此之快以至於我看到的。這是因爲我沒有檢查最終的大小。 – 2014-10-08 02:51:05

回答

1

要成爲最靈活,你可以使用std::distance

RAIterator mid = beg + std::distance(beg, end)/2; 

這不該」 t已經交付了不同於的結果雖然。

請注意,如果mid == end,*mid將給你未定義的行爲,當end已超過容器的末尾。

相關問題