一上午都没有找出来的小错误(悬赏20鱼币)
本帖最后由 爱学习520 于 2020-8-7 10:35 编辑做一个冒泡排序,比较结构体里面数据的大小,请问这个为什么错了,我测试过int、double、char这些都没有问题,这个比较结构体哪里错了,为什么不正确排序,如图:
正确答案应该是:
1 1
2 2
3 3
#include<iostream>
using namespace std;
class Text
{
public:
int x;
int y;
Text(){ }
Text(int x,int y)
{
this->x=x;
this->y=y;
}
bool operator>(Text& text)
{
return this->x > text.x&&this->y > text.y;
}
void print()
{
cout<<x<<""<<y<<endl;
}
};
//冒泡排序
template<class T>
void sort(T arr,int length)
{
int i,j;
Text* temp;
for(i=0;i<length-1;i++)
for(j=i+1;j<length;j++)
if(arr>arr)
{
temp=arr;
arr=arr;
arr=temp;
}
}
main()
{
int i;
Text a(2,2),b(3,3),c(1,1);
Text* arr={&a,&b,&c};
sort(arr,3);
arr->print();
arr->print();
arr->print();
} 为什么要用指针?指针交换乱了。
重载=操作符比较好
#include<iostream>
using namespace std;
class Text
{
public:
int x;
int y;
Text(){ }
Text(int x,int y)
{
this->x=x;
this->y=y;
}
//重载 =
Text & operator = (const Text & t)
{
x = t.x;
y = t.y;
return * this;
}
bool operator>(Text& text)
{
return this->x > text.x&&this->y > text.y;
}
void print()
{
cout<<x<<""<<y<<endl;
}
};
//冒泡排序
template<class T>
void sort(T arr,int length)
{
int i,j;
//
Text temp;
for(i=0;i<length-1;i++)
for(j=i+1;j<length;j++)
if(arr>arr)
{
temp=arr;
arr=arr;
arr=temp;
}
}
void main()
{
int i=0;
Text a(2,2),b(3,3),c(1,1);
Text arr={a,b,c};
sort(arr,3);
arr.print();
arr.print();
arr.print();
} xieglt 发表于 2020-8-7 10:47
为什么要用指针?指针交换乱了。
重载=操作符比较好
但是我哪个哪里错了呢,求指导 错在比较大小后的交换
交换的是指针,不是X,Y的值
3个指针变来变去,乱套了,自己跟踪调试一下。 看错了,是你的重载 〉调用写错了。
把
if(arr>arr)
改写成
if(*arr>*arr)
两个指针比较是他们的地址在比,而没有调用重载>函数。 所以建议不要随便用指针,很不优雅。 五楼说得对! xieglt 发表于 2020-8-7 11:10
看错了,是你的重载 〉调用写错了。
把
if(arr>arr)
非常感谢,20鱼币已经通过给你四个帖子分别支持了5鱼币,表示感谢 学习
页:
[1]