设置交集方法和运算符重载

时间:2015-11-14 15:08:46

标签: c++ memory dynamic operator-overloading

所以下面我有以下代码块。它是默认构造函数,默认参数也是10.下一个方法是交集方法,它采用两个集合对象的交集。此外,还有一种检查元素的元素方法。接下来是一个运算符重载方法,它应该从集合中删除一个元素。以下是我遇到的一些问题:

- 交集方法将元素显示为0,即使它应该显示两个集合之间共享的元素。例如,当我输入集合{1,2}和另一集{2,3,4}时,它应该显示{2},但它显示为0.令人惊讶的是,当我检查集合C的大小时显示为1,这是正确的。

- operator-()函数应该删除和元素,但删除集[i]不起作用

最后,我知道我正在使用的变量名称,但我使用这些名称来更好地了解正在发生的事情。此外,我们不允许使用标准库中的集合

Set::Set ( int s ){

        if ( s > 0 )
                psize = s;
        else
                psize = DEFAULTSIZE;
        //allocate an array of specified size
        set = new int[ psize ];

        if(!set) {
                //send an error is system cannot allocate memory
                cout << "Cannot Allocate Memory, exiting program... " << endl;
                exit (1);
        }

        for ( int i = 0; i < psize; i++){
                set[i] = 0;
                numOfElements = 0;
        }
}
Set Set::operator-( int n ){
        for ( int i = 0; i < numOfElements; i++){
                if(element(n)){
                        delete set[i];
                        numOfElements--;
                }
        }
        psize = numOfElements;

        return (*this);
}
Set Set::Intersection( Set &B ) {

        int newsize = numOfElements;

        Set C(newsize);
        int indx = 0;
                for ( int i = 0; i < numOfElements; i++ ){
                        if( B.element(set[i])){
                                C.set[indx] = set[i];
                                indx++;
                        }
                        else{
                                newsize--;
                                continue;
                        }
                }

        C.numOfElements = newsize;

        return C;
}
bool Set::element ( int n ){
        for ( int i = 0; i < psize; i++){
                if ( set[i] == n )
                        return true;
        }
        return false;
}

1 个答案:

答案 0 :(得分:0)

最大的错误是

中的第一个i
C.set[i] = set[i];

你是非密集地填充C.set,但是你以后计算它的大小,好像你已经密集填充它。