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);
答案 0 :(得分:1)
为了最灵活,您可以使用std::distance
:
RAIterator mid = beg + std::distance(beg, end) / 2;
虽然不应该提供与beg + (end-beg)/2
不同的结果。
请注意,如果mid == end
,*mid
将在end
超过容器末尾时为您提供未定义的行为。