对于类赋值,我需要使用迭代器合并一个向量。
我编写了以下适用于矢量的,但不使用迭代器:
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;
答案 0 :(得分:3)
你希望比较迭代器是否相同(只有可靠的输入的错误条件):
if (left!=right)
至于你的补充问题,你认为这是错误的。语义上添加left
和right
是没有意义的,因为它超过了数组的末尾,更不用说它会溢出。你想要的是将它们之间的距离加到left
:
IntVectorIt nMid=left+(right-left)/2;
答案 1 :(得分:1)
而不是left<right
,您必须使用*left<*right
。