爱学习520 发表于 2020-8-7 10:28:48

一上午都没有找出来的小错误(悬赏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();


   


}

xieglt 发表于 2020-8-7 10:47:39

为什么要用指针?指针交换乱了。

重载=操作符比较好

#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();
}

爱学习520 发表于 2020-8-7 10:58:20

xieglt 发表于 2020-8-7 10:47
为什么要用指针?指针交换乱了。

重载=操作符比较好


但是我哪个哪里错了呢,求指导

xieglt 发表于 2020-8-7 11:01:18

错在比较大小后的交换
交换的是指针,不是X,Y的值
3个指针变来变去,乱套了,自己跟踪调试一下。

xieglt 发表于 2020-8-7 11:10:33

看错了,是你的重载 〉调用写错了。

if(arr>arr)
改写成
if(*arr>*arr)

xieglt 发表于 2020-8-7 11:15:08

两个指针比较是他们的地址在比,而没有调用重载>函数。

xieglt 发表于 2020-8-7 11:15:51

所以建议不要随便用指针,很不优雅。

sunrise085 发表于 2020-8-7 11:35:03

五楼说得对!

爱学习520 发表于 2020-8-7 11:45:22

xieglt 发表于 2020-8-7 11:10
看错了,是你的重载 〉调用写错了。

if(arr>arr)


非常感谢,20鱼币已经通过给你四个帖子分别支持了5鱼币,表示感谢

aironeng 发表于 2020-12-8 09:06:12

学习
页: [1]
查看完整版本: 一上午都没有找出来的小错误(悬赏20鱼币)