如何从随机迭代器中获取中间元素?

时间:2014-10-08 02:37:27

标签: c++ merge

RAIterator mid = beg + (end-beg)/2;

使mid = beg。

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);

1 个答案:

答案 0 :(得分:1)

为了最灵活,您可以使用std::distance

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

虽然不应该提供与beg + (end-beg)/2不同的结果。

请注意,如果mid == end*mid将在end超过容器末尾时为您提供未定义的行为。