我编写的原始代码使用以下参数:
int m =排序列表1的大小
int n =排序列表2的大小
int A [] =排序列表1
int B [] =排序清单2
int C [] = 1和2的合并列表
我被要求将此代码添加到使用这些不同参数的现有文件中:
IntVectorIt start1
IntVectorIt end1
IntVectorIt start2
IntVectorIt end2
IntVectorIt start3
这里定义了这些变量(n是第一个排序数组的大小,m是第二个排序数组的大小):
typedef vector<int> IntVector;
typedef IntVector::iterator IntVectorIt;
IntVector Vector1(n);
IntVectorIt start1,end1,it1;
start1 = Vector1.begin();
end1 = Vector1.end();
IntVector Vector2(m);
IntVectorIt start2,end2,it2;
start2 = Vector2.begin();
end2 = Vector2.end();
IntVector Vector3(n+m);
IntVectorIt start3,end3,it3;
start3 = Vector3.begin();
end3 = Vector3.end();
//--The variables for my version of merge
IntVector MyVector(n+m);
IntVectorIt mystart,myend,myit;
mystart = MyVector.begin();
myend = MyVector.end();
我的合并代码:
void mymerge(int m, int n, int A[], int B[], int C[])
{
int i, j, k = 0;
while (i < m && j < n)
{
if (A[i] <= B[j])
{
C[k] = A[i];
i++;
}
else
{
C[k] = B[j];
j++;
}
k++;
}
if (i < m)
{
for (int p = i; p < m; p++)
{
C[k] = A[p];
k++;
}
}
else
{
for (int p = j; p < n; p++)
{
C[k] = B[p];
k++;
}
}
}
如果有人能帮助我弄清楚如何将这些迭代器作为参数,它会帮助我减少一吨。提前谢谢。
答案 0 :(得分:2)
因为它听起来像是家庭作业,所以我不会写出整个解决方案。不过,以下是有关迁移mymerge
的一些建议:
将签名更改为
void mymerge(
IntVectorIt aStart,
IntVectorIt aEnd,
IntVectorIt bStart,
IntVectorIt bEnd,
IntVectorIt cStart,
IntVectorIt cEnd
);
将运行索引更改为迭代器,例如
IntVectorIt i = aStart;
更改循环停止条件以使用迭代器,例如
i != aEnd