割り当てに問題があります。割り当ては、IntegerSetを作成することです。IntegerSetは、0から99までの数値を表す100個の要素の配列です。たとえば、数値5がセットa thena[5] = 1
に存在する場合、空のセットはゼロの配列です。
IntegerSetというクラスを作成しました。これがintegerSet.cppのコードです。
#include "integerset.h"
#include <iostream>
using std::cout;
using std::endl;
IntegerSet::IntegerSet(){
int temp[100] = {0};
set = temp;
}
IntegerSet::IntegerSet(int * setPtr) {
set = setPtr;
}
void IntegerSet::insertElement(int toInsert) {
if(toInsert < 100 && toInsert >= 0) {
set[toInsert] = 1;
}
}
void IntegerSet::deleteElement(int toDelete) {
if (toDelete < 100 && toDelete >= 0 ) {
set[toDelete] = 0;
}
}
IntegerSet * IntegerSet::unionOfSets(IntegerSet * otherPtr) {
int newSet[100] = {0};
for(int i = 0; i < 100; i++ ) {
if (this->set[i] == 1 || otherPtr->set[i] == 1) {
newSet[i] = 1;
}
}
return new IntegerSet(newSet);
}
IntegerSet * IntegerSet::intersectionOfSets(IntegerSet* otherPtr) {
int newSet[100] = {0};
for(int i = 0; i < 100 ; i++) {
if(this->set[i] == 1 && otherPtr->set[i] == 1){
newSet[i] = 1;
}
}
return new IntegerSet(newSet);
}
bool IntegerSet::isEmpty(){
for(int i = 0 ; i < 100 ; i++) {
if(set[i] == 1) {
return false;
}
}
return true;
}
bool IntegerSet::isEqualTo(IntegerSet * otherPtr) {
for(int i = 0; i < 100 ; i++) {
if(this->set[i] != otherPtr->set[i]) {
return false;
}
}
return true;
}
void IntegerSet::printSet() {
if(isEmpty()) {
cout << "---" << endl;
} else {
for(int i = 0; i < 100 ; i++) {
if(set[i] == 1) {
cout << i << ' ';
}
}
cout << endl;
}
}
IntegerSet::~IntegerSet() {
delete[] set;
}
クラスにはプライベートメンバーがいint * set;
ます。
これは私のクラスをテストするために使用される主な関数です:
#include <iostream>
#include<new>
#include "integerset.h"
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
IntegerSet * set1Ptr = new IntegerSet();
set1Ptr->insertElement(1);
set1Ptr->insertElement(2);
set1Ptr->insertElement(3);
set1Ptr->insertElement(50);
IntegerSet * set2Ptr = new IntegerSet();
set2Ptr->insertElement(0);
set2Ptr->insertElement(3);
set2Ptr->insertElement(2);
set2Ptr->insertElement(51);
set2Ptr->insertElement(100);
set2Ptr->insertElement(99);
IntegerSet * set3Ptr = set1Ptr->unionOfSets(set2Ptr);
IntegerSet * set4Ptr = set1Ptr->intersectionOfSets(set2Ptr);
cout << "First Set" << endl;
set1Ptr->printSet();
cout << "Second Set" << endl;
set2Ptr->printSet();
cout << "Equal ? : " << set1Ptr->isEqualTo(set2Ptr) << endl;
cout << "Intersection : " << endl;
set4Ptr->printSet();
cout << "Union : " << endl;
set3Ptr->printSet();
system("PAUSE");
return EXIT_SUCCESS;
}
これは私が走っているときに得られる出力です
First Set
16 19 35 45 46 54 66 84
Second Set
0 1 10 12 13 14 19 35 45 46 54 66 84
Equal ? : 1
Intersection :
16 19 35 45 46 54 66 84 98
Union :
0 1 10 12 13 14 19 35 45 46 54 66 84 98
トレースしてみましたが、何が悪いのかわかりませんので、よろしくお願いします。