Равенство & amp; Неравенство двух массивов

Для выполнения задания мне приходится перегружать несколько операторов и использовать их в отношении двух наборов. У меня есть класс Set, в котором есть два объекта, A и B, оба из которых являются массивами множеств. Я пытаюсь перегрузить функцию равенства и неравенства, которая будет сравнивать элементы в каждом наборе и выводить, равны они или нет. Функция должна принимать объект Set B в качестве аргумента и сравнивать Set A и Set B. Пока моя программа компилируется, она постоянно выводит, что мои наборы не равны, как при вводе двух одинаковых наборов, так и при вводе двух множества, которые не равны. Я пытался настроить свои функции в течение нескольких часов, но мне не повезло. Любая помощь высоко ценится!

 bool Set::operator==(Set B){for (int i=0; i < pSize; i++){

bool retstat = false;

if(set[i] == B.set[i]){

cout <<"equal" << endl;
}
else
bool retstat = false;
cout <<"not" << endl;

return (retstat);
}}bool Set::operator!=(Set B){

bool retstat = false;

for(int i=0; i < pSize; i++){

if(set[i] != B.set[i]){
retstat = true;
cout <<"not equal" << endl;
}
}
}

-2

Решение

Прежде всего, не используйте имена, которые зарезервированы стандартной библиотекой C ++ (т.е. set).

Во-вторых, ваш цикл for возвращается в первом цикле (т. Е. Неверен), также вы повторно инициализируете свой флаг «found» в теле вашего цикла.

В-третьих, передайте ваш объект в ваш перегруженный оператор по ссылке.

В-четвертых, сделайте ваши перегруженные операторы свободными функциями, чтобы они были симметричными, и сделайте их друзьями вашего класса, чтобы иметь доступ к своим закрытым членам.

Последний, но тем не менее важный. Если вы хотите сравнить два массива на равенство, используйте std::equal:

bool Set::operator==(Set const &B) {
return std::equal(set, set + pSize, B.set, B.set + B.pSize);
}

bool Set::operator!=(Set const &B) {
return !std::equal(set, set + pSize, B.set, B.set + B.pSize);
}
1

Другие решения

Ваш оператор == не прав, у вас 2 retstat, ты никогда не влияешь на это с истиной, ты проверяешь только 1-е.
Просмотрите свой код и сначала проверьте, имеют ли два набора одинаковый размер.

0

По вопросам рекламы [email protected]