0

我目前正在处理一项尝试实现 Bag 抽象数据类型的任务(所以我宁愿不发布完整的代码)。

以下是我目前正在尝试实现的方法:

template <typename T>
Bag<T> Bag<T>::operator+ (const Bag<T>& bag) {
    int sizeofCurrentMultiset = cardinality_;
    int sizeofPassedMultiset  = bag.cardinality_;
    int totalSize = sizeofCurrentMultiset + sizeofPassedMultiset;

    Bag<T> newBag(totalSize);

    for (int i = 0; i < sizeofCurrentMultiset; i++) {
        newBag.insert(array_[i]);
    }

    for (int i = 0; i < sizeofPassedMultiset; i++) {
        newBag.insert(bag.array_[i]);
    }

    return newBag;
}

我将元素存储为动态数组。

我的问题是,当新包被退回时,我可以很好地打印基数(打印到 4,原始包每个有两个元素),但是动态数组不包含数字(它打印出一些随机数,例如-1789102)。但是,当我尝试在返回袋子之前打印出元素时,它打印得很好。

毫无疑问,这将是一件微不足道的事情,但我会很感激你的帮助。

谢谢。

4

1 回答 1

2

您需要为您的Bag类编写一个复制构造函数。看起来您正在获得默认构造函数,它只对您的类进行浅拷贝。这就是为什么cardinality成员可以,但您的动态数组却不行的原因。当您的operator+函数返回Bag对象时,将调用复制构造函数。

于 2011-12-08T16:47:23.630 回答