如何更改我的合并算法以接受c ++中的不同参数?

时间:2010-10-08 00:53:07

标签: c++ merge

我编写的原始代码使用以下参数:

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++;
        }

  }

}

如果有人能帮助我弄清楚如何将这些迭代器作为参数,它会帮助我减少一吨。提前谢谢。

1 个答案:

答案 0 :(得分:2)

因为它听起来像是家庭作业,所以我不会写出整个解决方案。不过,以下是有关迁移mymerge的一些建议:

将签名更改为

void mymerge(
    IntVectorIt aStart,
    IntVectorIt aEnd,
    IntVectorIt bStart, 
    IntVectorIt bEnd,
    IntVectorIt cStart, 
    IntVectorIt cEnd
    );

将运行索引更改为迭代器,例如

IntVectorIt i = aStart;

更改循环停止条件以使用迭代器,例如

i != aEnd