繁体   English   中英

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

[英]How do i change my merge algorithm to accept different arguments in c++?

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

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

  }

}

如果有人可以帮助我弄清楚如何将这些迭代器作为参数,那将帮助我很多。 先感谢您。

由于听起来像是作业,所以我不会写整个解决方案。 但是,以下是有关迁移mymerge一些建议:

将签名更改为

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

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

IntVectorIt i = aStart;

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

i != aEnd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM