试图合并两个排序的动态数组--C ++

时间:2015-02-15 03:11:28

标签: c++ arrays sorting overloading

我有一个名为OrderedList的模板类,它采用原始数据类型并将其排序为从最小到最大的列表。我试图重载加法运算符,以允许两个列表合并到一个OrderedList。我希望该方法返回一个新的OrderedList对象,但我收到一个错误 这是我的OrderedList +运算符方法的代码。我还没有测试过这种方法的逻辑,所以我假设有一些错误。我目前正在尝试让+运算符合并数组并返回一个新对象

   template<class mytype>
OrderedList<mytype>& OrderedList<mytype>::operator+ (const OrderedList<mytype>& a)
{
int size = a.size() + count;
int i=0, j=0, k=0;
OrderedList<mytype> *newList = new OrderedList<mytype>(size);

   while (i < a.size() && j < count) {
        if (a[i] <= list[j]) {
             newList[k] = a[i];
              i++;
        } else {
              newList[k] = list[j];
              j++;
        }
        k++;

  if (i < a.size()) {
        for (int p = i; p < a.size(); p++) {
              newList[k] = a[p];
              k++;
        }
  } else {
        for (int p = j; p < count; p++) {
              newList[k] = list[p];
              k++;
        }
  }
}
return newList;
}

2 个答案:

答案 0 :(得分:1)

正如@ConnorHollis已在评论中指出,您正在OrderedList - 运算符中分配新的+实例。除了由于不同的类型和危险而无法工作,因为返回引用通常表示调用者不需要关心所有权,这也是非常意外的。 + - 运算符应始终返回一个新对象,即构造的返回副本。

答案 1 :(得分:1)

您的方法定义如下所示。

OrderedList<mytype>& OrderedList<mytype>::operator+ (const OrderedList<mytype>& a)

但是,plus运算符通常会返回类类型的新实例,因此它应该是:

OrderedList<mytype> OrderedList<mytype>::operator+ (const OrderedList<mytype>& a)

没有参考,你可以看到。

现在你有一个指向新OrderedList的指针,但你不需要分配它!您可以创建它的实例并通过复制构造函数或赋值运算符返回它。所以我会将新的列表实例化更改为:

OrderedList<mytype> newList(size);

然后它可能会编译。

我决定让你做一个简单的演示! http://ideone.com/bFiv1W

希望能更好地解释它。

相关问题