MergeSort使用迭代器的向量

时间:2011-04-19 03:28:27

标签: c++ vector iterator mergesort

对于类赋值,我需要使用迭代器合并一个向量。

我编写了以下适用于矢量的,但不使用迭代器:

void MergeSort(IntVector &vec, int left, int right)
{
     if (left < right)
     { 
          int nMid = ((left + right) / 2);
          MergeSort(vec, left, nMid);
          MergeSort(vec, nMid + 1, right);

          //merge(vec, left, nMid, right);
     }
}

我尝试进行一些更改以容纳迭代器,但它不允许我执行诸如&lt;之类的操作。和迭代器上的+。

void MergeSort(IntVectorIt left, IntVectorIt right)
{
     if (left < right)
     { 
          intVectorIt nMid = ((left + right) / 2);
          MergeSort(left, mid);
          MergeSort(mid + 1, right);

          //merge(vec, left, nMid, right);
     }
}

如何在mergesort中容纳迭代器的使用?

仅供参考,这些是我使用的typedef:

typedef vector<int> IntVector;
typedef IntVector::iterator IntVectorIt;

2 个答案:

答案 0 :(得分:3)

希望比较迭代器是否相同(只有可靠的输入的错误条件):

 if (left!=right)

至于你的补充问题,你认为这是错误的。语义上添加leftright是没有意义的,因为它超过了数组的末尾,更不用说它会溢出。你想要的是将它们之间的距离加到left

IntVectorIt nMid=left+(right-left)/2;

答案 1 :(得分:1)

而不是left<right,您必须使用*left<*right

相关问题