所以下面我有以下代码块。它是默认构造函数,默认参数也是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;
}
答案 0 :(得分:0)
最大的错误是
中的第一个i
C.set[i] = set[i];
你是非密集地填充C.set,但是你以后计算它的大小,好像你已经密集填充它。